| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578 |
- # This is the main desktop application release workflow for both nightly and beta/stable releases.
- name: Build-Desktop-Release
- on:
- workflow_dispatch:
- inputs:
- build-target:
- description: 'Build Target (Release Type)'
- type: choice
- required: true
- options:
- - beta
- - nightly
- - non-release
- default: "non-release"
- git-ref:
- description: "Release Git Ref (Which branch or tag to build?)"
- required: true
- default: "master"
- is-draft:
- description: 'Draft Release? (Beta only, Nightly will always be a non-draft)'
- type: boolean
- required: true
- default: true
- is-pre-release:
- description: 'Pre Release? (labeled as "PreRelease")'
- type: boolean
- required: true
- default: true
- enable-file-sync-production:
- description: 'File sync production mode'
- type: boolean
- required: true
- default: true
- enable-plugins:
- description: 'Build with plugin system support'
- type: boolean
- required: true
- default: true
- build-android:
- description: 'Build Android App'
- type: boolean
- required: true
- default: true
- schedule: # Every workday at the 2 P.M. (UTC) we run a scheduled nightly build
- - cron: '0 14 * * MON-FRI'
- env:
- CLOJURE_VERSION: '1.10.1.763'
- NODE_VERSION: '16'
- jobs:
- compile-cljs:
- runs-on: ubuntu-18.04
- steps:
- - name: Check build options
- if: ${{ github.event_name == 'workflow_dispatch' && (github.event.inputs.build-target == 'nightly' || github.event.inputs.build-target == 'beta') && github.event.inputs.git-ref != 'master' }}
- run: |
- echo "::error title=CheckFail::Nightly and Beta Release MUST be built from master"
- exit 1
- - name: Check out Git repository
- uses: actions/checkout@v2
- with:
- ref: ${{ github.event.inputs.git-ref }}
- - name: Install Node.js, NPM and Yarn
- uses: actions/setup-node@v2
- with:
- node-version: ${{ env.NODE_VERSION }}
- - name: Get yarn cache directory path
- id: yarn-cache-dir-path
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: Cache yarn cache directory
- uses: actions/cache@v2
- id: yarn-cache
- with:
- path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
- - name: Setup Java JDK
- uses: actions/[email protected]
- with:
- java-version: 1.8
- - name: Cache clojure deps
- uses: actions/cache@v2
- with:
- path: |
- ~/.m2/repository
- ~/.gitlibs
- key: ${{ runner.os }}-clojure-lib-${{ hashFiles('**/deps.edn') }}
- - name: Setup clojure
- uses: DeLaGuardo/[email protected]
- with:
- cli: ${{ env.CLOJURE_VERSION }}
- - name: Retrieve tag version
- id: ref
- run: |
- pkgver=$(node ./scripts/get-pkg-version.js "${{ github.event.inputs.build-target }}")
- echo ::set-output name=version::$pkgver
- - name: Do Not Overwrite Existing Release
- if: ${{ github.event.inputs.build-target == 'beta' }}
- run: |
- if curl -f "https://api.github.com/repos/${{ github.repository }}/releases/tags/${{ steps.ref.outputs.version }}" &>/dev/null; then
- echo "::error title=CheckFail::Release already exists"
- exit 1
- fi
- - name: Update Nightly APP Version
- if: ${{ github.event.inputs.build-target == 'nightly' || github.event_name == 'schedule' }}
- run: |
- sed -i 's/defonce version ".*"/defonce version "${{ steps.ref.outputs.version }}"/g' src/main/frontend/version.cljs
- - name: Set Build Environment Variables (only when workflow_dispath)
- if: ${{ github.event_name == 'workflow_dispatch' }}
- # if scheduled, use default settings
- run: |
- echo "ENABLE_PLUGINS=${{ github.event_name == 'schedule' || github.event.inputs.enable-plugins == 'true' }}" >> $GITHUB_ENV
- echo "ENABLE_FILE_SYNC_PRODUCTION=${{ github.event_name == 'schedule' || github.event.inputs.enable-file-sync-production == 'true' }}" >> $GITHUB_ENV
- - name: Compile CLJS
- run: yarn install && gulp build && yarn cljs:release-electron
- - name: Update APP Version
- run: |
- sed -i 's/"version": "0.0.1"/"version": "${{ steps.ref.outputs.version }}"/g' ./package.json
- working-directory: ./static
- - name: Display Package.json
- run: cat ./package.json
- working-directory: ./static
- - name: Save VERSION file
- run: echo "${{ steps.ref.outputs.version }}" > ./VERSION
- working-directory: ./static
- - name: List Files
- run: ls -al
- working-directory: ./static
- - name: Upload Sentry Sourcemaps (beta only)
- if: ${{ github.repository == 'logseq/logseq' && github.event_name == 'workflow_dispatch' && github.event.inputs.build-target == 'beta' }}
- run: |
- curl -sL https://sentry.io/get-cli/ | bash
- release_name="logseq@${{ steps.ref.outputs.version }}"
- sentry-cli releases new "${release_name}"
- sentry-cli releases files "${release_name}" upload-sourcemaps --ext map --ext js ./static/js --url-prefix '~/static/js'
- sentry-cli releases finalize "${release_name}"
- env:
- SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
- SENTRY_ORG: logseq
- SENTRY_PROJECT: logseq
- - name: Cache Static File
- uses: actions/upload-artifact@v2
- with:
- name: static
- path: static
- build-linux:
- runs-on: ubuntu-18.04
- needs: [ compile-cljs ]
- steps:
- - name: Download The Static Asset
- uses: actions/download-artifact@v2
- with:
- name: static
- path: static
- - name: Retrieve tag version
- id: ref
- run: |
- pkgver=$(cat ./static/VERSION)
- echo ::set-output name=version::$pkgver
- - name: Install Node.js, NPM and Yarn
- uses: actions/setup-node@v2
- with:
- node-version: ${{ env.NODE_VERSION }}
- # - name: Cache Node Modules
- # uses: actions/cache@v2
- # with:
- # path: |
- # **/node_modules
- # key: ${{ runner.os }}-node-modules
- - name: Build/Release Electron App
- run: yarn install && yarn electron:make
- working-directory: ./static
- - name: Save artifacts
- run: |
- mkdir -p builds
- # NOTE: save VERSION file to builds directory
- cp static/VERSION ./builds/VERSION
- mv static/out/make/*-*.AppImage ./builds/Logseq-linux-x64-${{ steps.ref.outputs.version }}.AppImage
- mv static/out/make/zip/linux/x64/*-linux-x64-*.zip ./builds/Logseq-linux-x64-${{ steps.ref.outputs.version }}.zip
- - name: Upload Artifact
- uses: actions/upload-artifact@v2
- with:
- name: logseq-linux-builds
- path: builds
- build-windows:
- runs-on: windows-latest
- needs: [ compile-cljs ]
- steps:
- - name: Download The Static Asset
- uses: actions/download-artifact@v2
- with:
- name: static
- path: static
- - name: Retrieve tag version
- id: ref
- run: |
- $env:PkgVer=$(cat ./static/VERSION)
- echo "::set-output name=version::$env:PkgVer"
- - name: Install Node.js, NPM and Yarn
- uses: actions/setup-node@v2
- with:
- node-version: ${{ env.NODE_VERSION }}
- # - name: Cache Node Modules
- # uses: actions/cache@v2
- # with:
- # path: |
- # **/node_modules
- # key: ${{ runner.os }}-node-modules
- - name: Deps Electron app
- run: yarn install
- working-directory: ./static
- - name: Fix Deps Electron app
- run: yarn run postinstall
- working-directory: ./static/node_modules/dugite/
- - name: Prepare Code Sign
- if: ${{ github.repository == 'logseq/logseq' }}
- run: |
- [IO.File]::WriteAllBytes($(Get-Location).Path + "\codesign.pfx", [Convert]::FromBase64String($env:CERTIFICATE))
- env:
- CERTIFICATE: ${{ secrets.CODE_SIGN_CERTIFICATE }}
- - name: Build/Release Electron app
- run: yarn electron:make
- working-directory: ./static
- env:
- CODE_SIGN_CERTIFICATE_FILE: ../codesign.pfx
- CODE_SIGN_CERTIFICATE_PASSWORD: ${{ secrets.CODE_SIGN_CERTIFICATE_PASSWORD }}
- - name: Save Artifact
- run: |
- mkdir builds
- mv static\out\make\squirrel.windows\x64\*.exe builds\Logseq-win-x64-${{ steps.ref.outputs.version }}.exe
- mv static\out\make\squirrel.windows\x64\*.nupkg builds\Logseq-win-x64-${{ steps.ref.outputs.version }}-full.nupkg
- mv static\out\make\squirrel.windows\x64\RELEASES builds\RELEASES
- - name: Upload Artifact
- uses: actions/upload-artifact@v2
- with:
- name: logseq-win64-builds
- path: builds
- build-macos-x64:
- needs: [ compile-cljs ]
- runs-on: macos-11
- steps:
- - name: Download The Static Asset
- uses: actions/download-artifact@v2
- with:
- name: static
- path: static
- - name: Retrieve tag version
- id: ref
- run: |
- pkgver=$(cat ./static/VERSION)
- echo ::set-output name=version::$pkgver
- - name: List Static Files
- run: ls -al ./static
- - name: Install Node.js, NPM and Yarn
- uses: actions/setup-node@v2
- with:
- node-version: ${{ env.NODE_VERSION }}
- - name: Get yarn cache directory path
- id: yarn-cache-dir-path
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: Cache yarn cache directory
- uses: actions/cache@v2
- id: yarn-cache
- with:
- path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
- - name: Signing By Apple Developer ID
- if: ${{ github.repository == 'logseq/logseq' }}
- uses: apple-actions/import-codesign-certs@v1
- with:
- p12-file-base64: ${{ secrets.APPLE_CERTIFICATES_P12 }}
- p12-password: ${{ secrets.APPLE_CERTIFICATES_P12_PASSWORD }}
- # - name: Cache Node Modules
- # uses: actions/cache@v2
- # with:
- # path: |
- # **/node_modules
- # key: ${{ runner.os }}-node-modules
- - name: Build/Release Electron App for x64
- run: yarn install && yarn electron:make
- working-directory: ./static
- env:
- APPLE_ID: ${{ secrets.APPLE_ID_EMAIL }}
- APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
- APPLE_ASC_PROVIDER: ${{ secrets.APPLE_ASC_PROVIDER }}
- - name: Save x64 artifacts
- run: |
- mkdir -p builds
- mv static/out/make/Logseq.dmg ./builds/Logseq-darwin-x64-${{ steps.ref.outputs.version }}.dmg
- mv static/out/make/zip/darwin/x64/*.zip ./builds/Logseq-darwin-x64-${{ steps.ref.outputs.version }}.zip
- - name: Upload Artifact
- uses: actions/upload-artifact@v2
- with:
- name: logseq-darwin-x64-builds
- path: builds
- build-macos-arm64:
- needs: [ compile-cljs ]
- runs-on: macos-11
- steps:
- - name: Download The Static Asset
- uses: actions/download-artifact@v2
- with:
- name: static
- path: static
- - name: Retrieve tag version
- id: ref
- run: |
- pkgver=$(cat ./static/VERSION)
- echo ::set-output name=version::$pkgver
- - name: Install Node.js, NPM and Yarn
- uses: actions/setup-node@v2
- with:
- node-version: ${{ env.NODE_VERSION }}
- - name: Get yarn cache directory path
- id: yarn-cache-dir-path
- run: echo "::set-output name=dir::$(yarn cache dir)"
- - name: Cache yarn cache directory
- uses: actions/cache@v2
- id: yarn-cache
- with:
- path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
- key: ${{ runner.os }}-arm64-yarn-${{ hashFiles('**/yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-arm64-yarn-
- - name: Signing By Apple Developer ID
- if: ${{ github.repository == 'logseq/logseq' }}
- uses: apple-actions/import-codesign-certs@v1
- with:
- p12-file-base64: ${{ secrets.APPLE_CERTIFICATES_P12 }}
- p12-password: ${{ secrets.APPLE_CERTIFICATES_P12_PASSWORD }}
- # - name: Cache Node Modules
- # uses: actions/cache@v2
- # with:
- # path: |
- # **/node_modules
- # key: ${{ runner.os }}-node-modules
- - name: Fetch deps and fix dugit arch for arm64
- run: yarn install --ignore-platform && cd node_modules/dugite && npm_config_arch=arm64 node script/download-git.js
- working-directory: ./static
- - name: Build/Release Electron App for arm64
- run: yarn electron:make-macos-arm64
- working-directory: ./static
- env:
- APPLE_ID: ${{ secrets.APPLE_ID_EMAIL }}
- APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
- APPLE_ASC_PROVIDER: ${{ secrets.APPLE_ASC_PROVIDER }}
- - name: Save arm64 artifacts
- run: |
- mkdir -p builds
- mv static/out/make/Logseq.dmg ./builds/Logseq-darwin-arm64-${{ steps.ref.outputs.version }}.dmg
- mv static/out/make/zip/darwin/arm64/*.zip ./builds/Logseq-darwin-arm64-${{ steps.ref.outputs.version }}.zip
- - name: Upload Artifact
- uses: actions/upload-artifact@v2
- with:
- name: logseq-darwin-arm64-builds
- path: builds
- # reuse workflow via workflow_call
- build-android:
- uses: ./.github/workflows/build-android.yml
- if: ${{ github.event_name == 'schedule' || github.event.inputs.build-android == 'true' }}
- with:
- build-target: "${{ github.event.inputs.build-target }}"
- # if scheduled, use production mode
- enable-file-sync-production: "${{ github.event_name == 'schedule' || github.event.inputs.enable-file-sync-production == 'true' }}"
- secrets:
- ANDROID_KEYSTORE: "${{ secrets.ANDROID_KEYSTORE }}"
- ANDROID_KEYSTORE_PASSWORD: "${{ secrets.ANDROID_KEYSTORE_PASSWORD }}"
- SENTRY_AUTH_TOKEN: "${{ secrets.SENTRY_AUTH_TOKEN }}"
- nightly-release:
- if: ${{ github.event_name == 'schedule' || github.event.inputs.build-target == 'nightly' }}
- needs: [ build-macos-x64, build-macos-arm64, build-linux, build-windows, build-android ]
- runs-on: ubuntu-18.04
- steps:
- - name: Download MacOS x64 Artifacts
- uses: actions/download-artifact@v2
- with:
- name: logseq-darwin-x64-builds
- path: ./
- - name: Download MacOS arm64 Artifacts
- uses: actions/download-artifact@v2
- with:
- name: logseq-darwin-arm64-builds
- path: ./
- - name: Download The Linux Artifacts
- uses: actions/download-artifact@v2
- with:
- name: logseq-linux-builds
- path: ./
- - name: Download The Windows Artifact
- uses: actions/download-artifact@v2
- with:
- name: logseq-win64-builds
- path: ./
- - name: Download Android Artifacts
- uses: actions/download-artifact@v2
- with:
- name: logseq-android-builds
- path: ./
- - name: Generate SHA256 checksums
- run: |
- sha256sum *-darwin-* > SHA256SUMS.txt
- sha256sum *-win-* >> SHA256SUMS.txt
- sha256sum *-linux-* >> SHA256SUMS.txt
- sha256sum *.apk >> SHA256SUMS.txt
- cat SHA256SUMS.txt
- - name: List files
- run: ls -rl
- - name: Update Nightly Release
- uses: andelf/nightly-release@main
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- tag_name: nightly
- name: 'Desktop/Android APP Nightly Release $$'
- draft: false
- prerelease: ${{ (github.event_name == 'workflow_dispatch' && github.event.inputs.is-pre-release) || (github.event_name == 'schedule')}}
- body: |
- This is a nightly release of the Logseq desktop app.
- It's unstable compared to the official releases, **use it with caution**!
- files: |
- ./SHA256SUMS.txt
- ./*.zip
- ./*.dmg
- ./*.exe
- ./*.AppImage
- ./*.apk
- release:
- # NOTE: For now, we only have beta channel to be released on Github
- if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.build-target == 'beta' }}
- needs: [ build-macos-x64, build-macos-arm64, build-linux, build-windows ]
- runs-on: ubuntu-latest
- steps:
- - name: Download MacOS x64 Artifacts
- uses: actions/download-artifact@v2
- with:
- name: logseq-darwin-x64-builds
- path: ./
- - name: Download MacOS arm64 Artifacts
- uses: actions/download-artifact@v2
- with:
- name: logseq-darwin-arm64-builds
- path: ./
- - name: Download The Linux Artifacts
- uses: actions/download-artifact@v2
- with:
- name: logseq-linux-builds
- path: ./
- - name: Download The Windows Artifact
- uses: actions/download-artifact@v2
- with:
- name: logseq-win64-builds
- path: ./
- - name: Download Android Artifacts
- uses: actions/download-artifact@v2
- if: ${{ github.event_name == 'schedule' || github.event.inputs.build-android == 'true' }}
- with:
- name: logseq-android-builds
- path: ./
- - name: List files
- run: ls -rl
- - name: Retrieve tag version
- id: ref
- run: |
- pkgver=$(cat VERSION)
- echo ::set-output name=version::$pkgver
- - name: Fix .nupkg name in RELEASES file
- run: |
- sed -i "s/Logseq-.*.nupkg/Logseq-win-x64-${{ steps.ref.outputs.version }}-full.nupkg/g" RELEASES
- - name: Generate SHA256 checksums
- run: |
- sha256sum *-darwin-* > SHA256SUMS.txt
- sha256sum *-win-* >> SHA256SUMS.txt
- sha256sum *-linux-* >> SHA256SUMS.txt
- sha256sum *.apk >> SHA256SUMS.txt
- sha256sum RELEASES >> SHA256SUMS.txt
- cat SHA256SUMS.txt
- - name: Create Release Draft
- uses: softprops/action-gh-release@v1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- tag_name: ${{ steps.ref.outputs.version }}
- name: Desktop/Android APP ${{ steps.ref.outputs.version }} (Beta Testing)
- body: "TODO: Fill this changelog. Sorry for the inconvenience!"
- draft: ${{ github.event.inputs.is-draft }}
- prerelease: ${{ github.event.inputs.is-pre-release }}
- files: |
- ./VERSION
- ./SHA256SUMS.txt
- ./*.zip
- ./*.dmg
- ./*.exe
- ./*.nupkg
- ./RELEASES
- ./*.AppImage
- ./*.apk
|