diff --git a/.dockerignore b/.dockerignore index 941905c66..64bcb6983 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,4 +6,5 @@ /npm-debug.log node_modules -src/**/*.ts \ No newline at end of file +src/**/*.ts +!src/services/asset_path.ts \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 747432396..529e685e9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,6 +7,81 @@ env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} jobs: + build_darwin-x64: + name: Build macOS x86_64 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up node & dependencies + uses: actions/setup-node@v4 + with: + node-version: 18 + cache: "npm" + - run: npm ci + - run: ./bin/build-mac-x64.sh + - uses: actions/upload-artifact@v4 + with: + name: trilium-mac-x64.zip + path: dist/trilium-mac-x64*.zip + build_linux-x64: + name: Build Linux x86_64 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up node & dependencies + uses: actions/setup-node@v4 + with: + node-version: 18 + cache: "npm" + - run: npm ci + - run: ./bin/build-linux-x64.sh + - uses: actions/upload-artifact@v4 + with: + name: trilium-linux-x64.tar.xz + path: dist/trilium-linux-x64-*.tar.xz + - uses: actions/upload-artifact@v4 + with: + name: trilium_amd64.deb + path: dist/trilium_*.deb + build_linux_server-x64: + name: Build Linux Server x86_64 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Set up node & dependencies + uses: actions/setup-node@v4 + with: + node-version: 18 + cache: "npm" + - run: npm ci + - run: ./bin/build-server.sh + - uses: actions/upload-artifact@v4 + with: + name: trilium-linux-x64-server.tar.xz + path: dist/trilium-linux-x64-server-*.tar.xz + build_windows-x64: + name: Build Windows x86_64 + runs-on: ubuntu-latest + steps: + - name: Set up Wine + run: | + sudo dpkg --add-architecture i386 + wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add - + sudo add-apt-repository ppa:cybermax-dexter/sdl2-backport + sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu $(lsb_release -cs) main" + sudo apt install --install-recommends winehq-stable + - uses: actions/checkout@v4 + - name: Set up node & dependencies + uses: actions/setup-node@v4 + with: + node-version: 18 + cache: "npm" + - run: npm ci + - run: ./bin/build-win-x64.sh + - uses: actions/upload-artifact@v4 + with: + name: trilium-windows-x64.zip + path: dist/trilium-windows-x64-*.zip build_docker: name: Build Docker image runs-on: ubuntu-latest diff --git a/Dockerfile b/Dockerfile index dfeb4a0d7..78f058529 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,7 +34,8 @@ RUN set -x \ && npm prune --omit=dev \ && cp src/public/app/share.js src/public/app-dist/. \ && cp -r src/public/app/doc_notes src/public/app-dist/. \ - && rm -rf src/public/app + && rm -rf src/public/app \ + && rm src/services/asset_path.ts # Some setup tools need to be kept RUN apk add --no-cache su-exec shadow diff --git a/bin/copy-trilium.sh b/bin/copy-trilium.sh index 9fdfe0293..8affb7be3 100755 --- a/bin/copy-trilium.sh +++ b/bin/copy-trilium.sh @@ -1,5 +1,8 @@ #!/usr/bin/env bash +shopt -s globstar +set -e + if [[ $# -eq 0 ]] ; then echo "Missing argument of target directory" exit 1 @@ -9,25 +12,36 @@ if ! [[ $(which npm) ]]; then exit 1 fi -n exec 18.18.2 npm run webpack || npm run webpack +# Trigger the TypeScript build +echo TypeScript build start +npx tsc +echo TypeScript build finished +# Copy the TypeScript artifacts DIR="$1" - rm -rf "$DIR" mkdir -pv "$DIR" +echo Webpack start +npm run webpack +echo Webpack finish + echo "Copying Trilium to build directory $DIR" for d in 'images' 'libraries' 'src' 'db'; do cp -r "$d" "$DIR"/ done -for f in 'package.json' 'package-lock.json' 'README.md' 'LICENSE' 'config-sample.ini' 'electron.js'; do + +for f in 'package.json' 'package-lock.json' 'README.md' 'LICENSE' 'config-sample.ini'; do cp "$f" "$DIR"/ done -cp webpack-* "$DIR"/ # here warning because there is no 'webpack-*', but webpack.config.js only + +script_dir=$(realpath $(dirname $0)) +cp -Rv "$script_dir/../build/src" "$DIR" +cp "$script_dir/../build/electron.js" "$DIR" # run in subshell (so we return to original dir) -(cd $DIR && n exec 18.18.2 npm install --only=prod) +(cd $DIR && npm install --only=prod) if [[ -d "$DIR"/node_modules ]]; then # cleanup of useless files in dependencies diff --git a/package.json b/package.json index e37e6204c..e48bff6c2 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "build-backend-docs": "rm -rf ./docs/backend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/backend_api src/becca/entities/*.js src/services/backend_script_api.js src/services/sql.js", "build-frontend-docs": "rm -rf ./docs/frontend_api && ./node_modules/.bin/jsdoc -c jsdoc-conf.json -d ./docs/frontend_api src/public/app/entities/*.js src/public/app/services/frontend_script_api.js src/public/app/widgets/basic_widget.js src/public/app/widgets/note_context_aware_widget.js src/public/app/widgets/right_panel_widget.js", "build-docs": "npm run build-backend-docs && npm run build-frontend-docs", - "webpack": "webpack -c webpack.config.js", + "webpack": "webpack -c webpack.config.ts", "test-jasmine": "TRILIUM_DATA_DIR=~/trilium/data-test jasmine", "test-es6": "node -r esm spec-es6/attribute_parser.spec.js ", "test": "npm run test-jasmine && npm run test-es6", diff --git a/webpack.config.js b/webpack.config.ts similarity index 82% rename from webpack.config.js rename to webpack.config.ts index 41077c00e..bd7135e24 100644 --- a/webpack.config.js +++ b/webpack.config.ts @@ -1,5 +1,5 @@ -const path = require('path'); -const assetPath = require('./src/services/asset_path'); +import path = require('path'); +import assetPath = require('./src/services/asset_path'); module.exports = { mode: 'production',