From fb1ed90ecc69af72f6469262b0648c239677f018 Mon Sep 17 00:00:00 2001 From: Joooye_34 Date: Thu, 21 Dec 2023 07:58:16 +0000 Subject: [PATCH] ci: use setup version action to init version (#5365) 1. Create setup version action to unify version initialization 2. Split tag event from release desktop 3. Add schedule to daily deploy and desktop release --- .github/actions/setup-version/action.yml | 20 ++++++++ .github/workflows/deploy-automatically.yml | 27 +++++++++++ .github/workflows/deploy.yml | 26 ++++++---- .github/workflows/dispatch-deploy.yml | 30 ------------ .../release-desktop-automatically.yml | 27 +++++++++++ ...se-desktop-app.yml => release-desktop.yml} | 48 +++++++------------ 6 files changed, 109 insertions(+), 69 deletions(-) create mode 100644 .github/actions/setup-version/action.yml create mode 100644 .github/workflows/deploy-automatically.yml delete mode 100644 .github/workflows/dispatch-deploy.yml create mode 100644 .github/workflows/release-desktop-automatically.yml rename .github/workflows/{release-desktop-app.yml => release-desktop.yml} (88%) diff --git a/.github/actions/setup-version/action.yml b/.github/actions/setup-version/action.yml new file mode 100644 index 0000000000..4c60d599d2 --- /dev/null +++ b/.github/actions/setup-version/action.yml @@ -0,0 +1,20 @@ +name: Setup Version +description: 'Setup Version' +runs: + using: 'composite' + steps: + - name: 'Write Version' + id: version + shell: bash + run: | + if [ "${{ github.ref_type }}" == "tag" ]; then + APP_VERSION=$(echo "${{ github.ref_name }}" | sed 's/^v//') + else + PACKAGE_VERSION=$(node -p "require('./package.json').version") + TIME_VERSION=$(date +%Y%m%d%H%M) + GIT_SHORT_HASH=$(git rev-parse --short HEAD) + APP_VERSION=$PACKAGE_VERSION-nightly-$TIME_VERSION-$GIT_SHORT_HASH + fi + echo $APP_VERSION + echo "APP_VERSION=$APP_VERSION" >> "$GITHUB_OUTPUT" + ./scripts/set-version.sh $APP_VERSION diff --git a/.github/workflows/deploy-automatically.yml b/.github/workflows/deploy-automatically.yml new file mode 100644 index 0000000000..b15b7af05f --- /dev/null +++ b/.github/workflows/deploy-automatically.yml @@ -0,0 +1,27 @@ +name: Deploy Automatically + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+-canary.[0-9]+' + schedule: + - cron: '0 9 * * *' + +jobs: + dispatch-deploy: + runs-on: ubuntu-latest + name: Setup Deploy + steps: + - name: dispatch deploy by tag + if: ${{ github.event_name == 'push' }} + uses: benc-uk/workflow-dispatch@v1 + with: + workflow: deploy.yml + inputs: '{ "flavor": "canary" }' + - name: dispatch deploy by schedule + if: ${{ github.event_name == 'schedule' }} + uses: benc-uk/workflow-dispatch@v1 + with: + workflow: deploy.yml + inputs: '{ "flavor": "canary" }' + ref: canary diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d0ec8394af..7749f50975 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,10 +4,14 @@ on: workflow_dispatch: inputs: flavor: - description: 'Build type (canary, beta, or stable or internal)' - type: string + description: 'Select what enverionment to deploy to' + type: choice default: canary - + options: + - canary + - beta + - stable + - internal env: APP_NAME: affine NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} @@ -18,6 +22,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - name: Setup Version + uses: ./.github/actions/setup-version - name: Setup Node.js uses: ./.github/actions/setup-node with: @@ -36,6 +42,8 @@ jobs: environment: ${{ github.event.inputs.flavor }} steps: - uses: actions/checkout@v4 + - name: Setup Version + uses: ./.github/actions/setup-version - name: Setup Node.js uses: ./.github/actions/setup-node - name: Build Plugins @@ -67,6 +75,8 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Setup Version + uses: ./.github/actions/setup-version - name: Setup Node.js uses: ./.github/actions/setup-node - name: Build Rust @@ -88,6 +98,8 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Setup Version + uses: ./.github/actions/setup-version - name: Setup Node.js uses: ./.github/actions/setup-node - name: Build Rust @@ -207,12 +219,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: setup deploy version - id: version - run: | - export APP_VERSION=`node -e "console.log(require('./package.json').version)"` - echo $APP_VERSION - echo "APP_VERSION=$APP_VERSION" >> "$GITHUB_OUTPUT" + - name: Setup Version + uses: ./.github/actions/setup-version - name: Deploy to ${{ github.event.inputs.flavor }} uses: ./.github/actions/deploy with: diff --git a/.github/workflows/dispatch-deploy.yml b/.github/workflows/dispatch-deploy.yml deleted file mode 100644 index fa58a0a679..0000000000 --- a/.github/workflows/dispatch-deploy.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Dispatch Deploy by tag - -on: - push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+-canary.[0-9]+' - -jobs: - dispatch-deploy-by-tag: - runs-on: ubuntu-latest - name: Setup deploy environment - steps: - - uses: actions/checkout@v4 - - name: Setup Node.js - uses: ./.github/actions/setup-node - with: - extra-flags: 'workspaces focus @affine/monorepo' - hard-link-nm: false - electron-install: false - build-infra: false - build-plugins: false - - name: Setup output value - id: flavor - run: | - node -e "const env = require('semver').parse('${{ github.ref_name }}').prerelease[0] ?? 'stable'; console.log(`flavor=${env}`)" >> "$GITHUB_OUTPUT" - - name: dispatch deploy - uses: benc-uk/workflow-dispatch@v1 - with: - workflow: deploy.yml - inputs: '{ "flavor": "${{ steps.flavor.outputs.flavor }}" }' diff --git a/.github/workflows/release-desktop-automatically.yml b/.github/workflows/release-desktop-automatically.yml new file mode 100644 index 0000000000..60887b09e1 --- /dev/null +++ b/.github/workflows/release-desktop-automatically.yml @@ -0,0 +1,27 @@ +name: Release Desktop Automatically + +on: + push: + tags: + - 'v[0-9]+.[0-9]+.[0-9]+-canary.[0-9]+' + schedule: + - cron: '0 9 * * *' + +jobs: + dispatch-release-desktop: + runs-on: ubuntu-latest + name: Setup Release Desktop + steps: + - name: dispatch desktop release by tag + if: ${{ github.event_name == 'push' }} + uses: benc-uk/workflow-dispatch@v1 + with: + workflow: release-desktop.yml + inputs: '{ "build-type": "canary", "is-draft": false, "is-pre-release": true }' + - name: dispatch desktop release by schedule + if: ${{ github.event_name == 'schedule' }} + uses: benc-uk/workflow-dispatch@v1 + with: + workflow: release-desktop.yml + inputs: '{ "build-type": "canary", "is-draft": false, "is-pre-release": true }' + ref: canary diff --git a/.github/workflows/release-desktop-app.yml b/.github/workflows/release-desktop.yml similarity index 88% rename from .github/workflows/release-desktop-app.yml rename to .github/workflows/release-desktop.yml index 41347783d6..7dc9755ab8 100644 --- a/.github/workflows/release-desktop-app.yml +++ b/.github/workflows/release-desktop.yml @@ -1,15 +1,17 @@ name: Release Desktop App on: - push: - tags: - - 'v[0-9]+.[0-9]+.[0-9]+-canary.[0-9]+' workflow_dispatch: inputs: - version: - description: App Version + build-type: + description: 'Build Type' + type: choice required: true - default: 0.0.0 + default: canary + options: + - canary + - beta + - stable is-draft: description: 'Draft Release?' type: boolean @@ -20,11 +22,6 @@ on: type: boolean required: true default: true - build-type: - description: 'Build Type (canary, beta or stable)' - type: string - required: true - default: canary permissions: actions: write @@ -32,7 +29,7 @@ permissions: security-events: write env: - BUILD_TYPE: ${{ github.event.inputs.build-type || (github.ref_type == 'tag' && contains(github.ref, 'canary') && 'canary') }} + BUILD_TYPE: ${{ github.event.inputs.build-type }} DEBUG: napi:* APP_NAME: affine MACOSX_DEPLOYMENT_TARGET: '10.13' @@ -40,26 +37,17 @@ env: jobs: before-make: runs-on: ubuntu-latest - environment: ${{ github.event.inputs.build-type || (github.ref_type == 'tag' && contains(github.ref, 'canary') && 'canary') }} + environment: ${{ github.event.inputs.build-type }} outputs: - RELEASE_VERSION: ${{ steps.get-canary-version.outputs.RELEASE_VERSION }} + RELEASE_VERSION: ${{ steps.version.outputs.APP_VERSION }} steps: - uses: actions/checkout@v4 + - name: Setup Version + uses: ./.github/actions/setup-version - name: Setup Node.js uses: ./.github/actions/setup-node - name: Setup @sentry/cli uses: ./.github/actions/setup-sentry - - name: Get canary version - id: get-canary-version - if: ${{ github.ref_type == 'tag' }} - run: | - TAG_VERSION=${GITHUB_REF#refs/tags/v} - PACKAGE_VERSION=$(node -p "require('./packages/frontend/electron/package.json').version") - if [ "$TAG_VERSION" != "$PACKAGE_VERSION" ]; then - echo "Tag version ($TAG_VERSION) does not match package.json version ($PACKAGE_VERSION)" - exit 1 - fi - echo "RELEASE_VERSION=$(node -p "require('./packages/frontend/electron/package.json').version")" >> $GITHUB_OUTPUT - name: generate-assets run: yarn workspace @affine/electron generate-assets env: @@ -67,7 +55,7 @@ jobs: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_DSN: ${{ secrets.SENTRY_DSN }} - RELEASE_VERSION: ${{ github.event.inputs.version || steps.get-canary-version.outputs.RELEASE_VERSION }} + RELEASE_VERSION: ${{ steps.version.outputs.APP_VERSION }} SKIP_PLUGIN_BUILD: 'true' SKIP_NX_CACHE: 'true' @@ -361,14 +349,14 @@ jobs: run: | node ./packages/frontend/electron/scripts/generate-yml.js env: - RELEASE_VERSION: ${{ github.event.inputs.version || needs.before-make.outputs.RELEASE_VERSION }} + RELEASE_VERSION: ${{ needs.before-make.outputs.RELEASE_VERSION }} - name: Create Release Draft uses: softprops/action-gh-release@v1 with: - name: ${{ github.event.inputs.version || needs.before-make.outputs.RELEASE_VERSION }} + name: ${{ needs.before-make.outputs.RELEASE_VERSION }} body: '' - draft: ${{ github.event.inputs.is-draft || true }} - prerelease: ${{ github.event.inputs.is-pre-release || needs.before-make.outputs.version }} + draft: ${{ github.event.inputs.is-draft }} + prerelease: ${{ github.event.inputs.is-pre-release }} files: | ./VERSION ./*.zip