From abda8f77df84a9cff90314d4d23b9e8066d13a71 Mon Sep 17 00:00:00 2001 From: YANG QIA <2013xile@gmail.com> Date: Wed, 6 Nov 2024 14:11:48 +0800 Subject: [PATCH] chore(ci): manual release next (#5600) * chore(ci): manual release next * fix: branch * chore: update --- .github/workflows/changelog-and-release.yml | 8 +- .github/workflows/manual-release-next.yml | 86 +++++++++++ .github/workflows/manual-release.yml | 7 +- .github/workflows/release-next.yml | 160 -------------------- .github/workflows/release.yml | 23 ++- 5 files changed, 110 insertions(+), 174 deletions(-) create mode 100644 .github/workflows/manual-release-next.yml delete mode 100644 .github/workflows/release-next.yml diff --git a/.github/workflows/changelog-and-release.yml b/.github/workflows/changelog-and-release.yml index da1e7fe5d..84771e485 100644 --- a/.github/workflows/changelog-and-release.yml +++ b/.github/workflows/changelog-and-release.yml @@ -16,7 +16,7 @@ on: default: beta push: tags: - - 'v*-beta' + - 'v*' jobs: write-changelog-and-release: @@ -25,11 +25,13 @@ jobs: - name: Get info id: get-info run: | - if [[ "${{ inputs.version }}" == "alpha" ]]; then + if [[ "${{ inputs.version }}" == "alpha" || ${{ github.ref_name }} =~ "alpha" ]]; then echo "branch=$(echo 'next')" >> $GITHUB_OUTPUT + echo "version=$(echo 'alpha')" >> $GITHUB_OUTPUT echo "proRepos=$(echo '${{ vars.NEXT_PRO_PLUGIN_REPOS }}')" >> $GITHUB_OUTPUT else echo "branch=$(echo 'main')" >> $GITHUB_OUTPUT + echo "version=$(echo 'beta')" >> $GITHUB_OUTPUT echo "proRepos=$(echo '${{ vars.PRO_PLUGIN_REPOS }}')" >> $GITHUB_OUTPUT fi - uses: actions/create-github-app-token@v1 @@ -81,7 +83,7 @@ jobs: - name: Run script shell: bash run: | - node scripts/release/changelogAndRelease.js --ver ${{ inputs.version }} --cmsURL ${{ secrets.CMS_URL }} --cmsToken ${{ secrets.CMS_TOKEN }} + node scripts/release/changelogAndRelease.js --ver ${{ steps.get-info.outputs.version }} --cmsURL ${{ secrets.CMS_URL }} --cmsToken ${{ secrets.CMS_TOKEN }} env: PRO_PLUGIN_REPOS: ${{ steps.get-info.outputs.proRepos }} GH_TOKEN: ${{ steps.app-token.outputs.token }} diff --git a/.github/workflows/manual-release-next.yml b/.github/workflows/manual-release-next.yml new file mode 100644 index 000000000..c62df15b3 --- /dev/null +++ b/.github/workflows/manual-release-next.yml @@ -0,0 +1,86 @@ +name: Manual release next + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +on: + workflow_dispatch: + +jobs: + update-version: + runs-on: ubuntu-latest + steps: + - uses: actions/create-github-app-token@v1 + id: app-token + with: + app-id: ${{ vars.NOCOBASE_APP_ID }} + private-key: ${{ secrets.NOCOBASE_APP_PRIVATE_KEY }} + repositories: nocobase,pro-plugins,${{ join(fromJSON(vars.NEXT_PRO_PLUGIN_REPOS), ',') }},${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ',') }} + skip-token-revoke: true + - name: Get GitHub App User ID + id: get-user-id + run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT" + env: + GH_TOKEN: ${{ steps.app-token.outputs.token }} + - name: Checkout + uses: actions/checkout@v4 + with: + repository: nocobase/nocobase + token: ${{ steps.app-token.outputs.token }} + persist-credentials: true + fetch-depth: 0 + ref: next + - name: Checkout pro-plugins + uses: actions/checkout@v4 + with: + repository: nocobase/pro-plugins + path: packages/pro-plugins + fetch-depth: 0 + ref: next + token: ${{ steps.app-token.outputs.token }} + persist-credentials: true + - name: Clone pro repos + shell: bash + run: | + for repo in ${{ join(fromJSON(vars.NEXT_PRO_PLUGIN_REPOS), ' ') }} ${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ' ') }} + do + git clone -b next https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/nocobase/$repo.git packages/pro-plugins/@nocobase/$repo + done + - name: Set Node.js 18 + uses: actions/setup-node@v3 + with: + node-version: 18 + - name: Install Lerna + run: npm install -g lerna@4 auto-changelog@2 + - name: Run release.sh + shell: bash + run: | + cd ./packages/pro-plugins + git checkout next + for repo in ${{ join(fromJSON(vars.NEXT_PRO_PLUGIN_REPOS), ' ') }} ${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ' ') }} + do + echo "@nocobase/$repo" >> .git/info/exclude + done + echo "$(<.git/info/exclude )" + cd ./../.. + git checkout next + git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]' + git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>' + echo "packages/pro-plugins" >> .git/info/exclude + bash release.sh + env: + PRO_PLUGIN_REPOS: ${{ vars.NEXT_PRO_PLUGIN_REPOS }} + CUSTOM_PRO_PLUGIN_REPOS: ${{ vars.CUSTOM_PRO_PLUGIN_REPOS }} + - name: Push + run: | + for repo in ${{ join(fromJSON(vars.NEXT_PRO_PLUGIN_REPOS), ' ') }} ${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ' ') }} + do + cd ./packages/pro-plugins/@nocobase/$repo + git push origin next --atomic --tags + cd ../../../../ + done + cd ./packages/pro-plugins + git push origin next --atomic --tags + cd ../../ + git push origin next --tags --atomic diff --git a/.github/workflows/manual-release.yml b/.github/workflows/manual-release.yml index 218c17f08..597ce032a 100644 --- a/.github/workflows/manual-release.yml +++ b/.github/workflows/manual-release.yml @@ -6,10 +6,6 @@ concurrency: on: workflow_dispatch: - inputs: - is_feat: - description: 'is feat' - type: boolean jobs: pre-merge-main-into-next: @@ -110,9 +106,8 @@ jobs: git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]' git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>' echo "packages/pro-plugins" >> .git/info/exclude - bash release.sh $IS_FEAT + bash release.sh env: - IS_FEAT: ${{ inputs.is_feat && '--is-feat' || '' }} PRO_PLUGIN_REPOS: ${{ vars.PRO_PLUGIN_REPOS }} CUSTOM_PRO_PLUGIN_REPOS: ${{ vars.CUSTOM_PRO_PLUGIN_REPOS }} - name: Push and merge into next diff --git a/.github/workflows/release-next.yml b/.github/workflows/release-next.yml deleted file mode 100644 index d22d208ae..000000000 --- a/.github/workflows/release-next.yml +++ /dev/null @@ -1,160 +0,0 @@ -name: Release next - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -on: - workflow_dispatch: - -jobs: - publish-npm: - runs-on: ubuntu-latest - steps: - - name: Set Node.js 18 - uses: actions/setup-node@v3 - with: - node-version: 18 - - uses: actions/create-github-app-token@v1 - id: app-token - with: - app-id: ${{ vars.NOCOBASE_APP_ID }} - private-key: ${{ secrets.NOCOBASE_APP_PRIVATE_KEY }} - repositories: nocobase,pro-plugins,${{ join(fromJSON(vars.NEXT_PRO_PLUGIN_REPOS), ',') }},${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ',') }} - skip-token-revoke: true - - name: Get GitHub App User ID - id: get-user-id - run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT" - env: - GH_TOKEN: ${{ steps.app-token.outputs.token }} - - name: Checkout - uses: actions/checkout@v4 - with: - repository: nocobase/nocobase - ref: next - token: ${{ steps.app-token.outputs.token }} - persist-credentials: true - fetch-depth: 0 - - name: Send curl request and parse response - env: - PKG_USERNAME: ${{ secrets.PKG_USERNAME }} - PKG_PASSWORD: ${{ secrets.PKG_PASSWORD }} - run: | - mkdir git-ci-cache - apt-get update && apt-get install -y jq gh - response1=$(curl -s 'https://pkg.nocobase.com/-/verdaccio/sec/login' \ - -H 'content-type: application/json' \ - --data-raw '{"username":"'$PKG_USERNAME'","password":"'$PKG_PASSWORD'"}') - token1=$(echo $response1 | jq -r '.token') - response2=$(curl -s 'https://pkg-src.nocobase.com/-/verdaccio/sec/login' \ - -H 'content-type: application/json' \ - --data-raw '{"username":"'$PKG_USERNAME'","password":"'$PKG_PASSWORD'"}') - token2=$(echo $response2 | jq -r '.token') - echo "PKG_NOCOBASE_TOKEN=$token1" >> $GITHUB_ENV - echo "PKG_SRC_NOCOBASE_TOKEN=$token2" >> $GITHUB_ENV - - name: restore cache - id: cache - uses: actions/cache@v3 - with: - path: ./git-ci-cache - key: new-next-version-${{ github.run_id }} - - name: Set NEWVERSION variable - id: set_version - run: | - cd ./git-ci-cache - if [ -f newversion.txt ]; then - NEWVERSION=$(cat newversion.txt) - else - NEWVERSION=$(cat ../lerna.json | jq -r '.version').$(date +'%Y%m%d%H%M%S') - echo "$NEWVERSION" > newversion.txt - fi - echo "NEWVERSION=$NEWVERSION" >> $GITHUB_ENV - - name: Print NEWVERSION - run: echo "The new version is ${{ env.NEWVERSION }}" - - name: Save NEWVERSION to cache - run: echo "NEWVERSION=$NEWVERSION" >> ./git-ci-cache/newversion.txt - - name: save cache - id: save-cache - uses: actions/cache/save@v3 - if: steps.cache.outputs.cache-hit != 'true' - with: - path: ./git-ci-cache - key: new-next-version-${{ github.run_id }} - - name: publish npmjs.org - continue-on-error: true - run: | - git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]' - git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com>' - git config --global --add safe.directory /__w/nocobase/nocobase - npm config set access public - npm config set registry https://registry.npmjs.org/ - npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} - yarn config set access public - yarn config set registry https://registry.npmjs.org/ - yarn config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} - yarn install - yarn lerna version ${{ env.NEWVERSION }} -y --no-git-tag-version - yarn build - echo "# test" >> Release.md - git add . - git commit -m "chore(versions): test publish packages xxx" - cat lerna.json - yarn release:force --no-verify-access --no-git-reset --registry https://registry.npmjs.org/ --dist-tag=next - - name: Checkout pro-plugins - uses: actions/checkout@v3 - with: - repository: nocobase/pro-plugins - path: packages/pro-plugins - ref: next - fetch-depth: 0 - token: ${{ steps.app-token.outputs.token }} - - name: Clone pro repos - shell: bash - run: | - for repo in ${{ join(fromJSON(vars.NEXT_PRO_PLUGIN_REPOS), ' ') }} ${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ' ') }} - do - git clone -b next https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/nocobase/$repo.git packages/pro-plugins/@nocobase/$repo - done - - name: Build Pro plugins - run: | - yarn config set registry https://registry.npmjs.org/ - yarn install - yarn lerna version ${{ env.NEWVERSION }} -y --no-git-tag-version - yarn build packages/pro-plugins - - name: publish pkg.nocobase.com - run: | - git reset --hard - npm config set //pkg.nocobase.com/:_authToken=${{ env.PKG_NOCOBASE_TOKEN }} - yarn release:force --no-verify-access --no-git-reset --registry https://pkg.nocobase.com --dist-tag=next - - name: publish pkg-src.nocobase.com - run: | - git reset --hard - bash generate-npmignore.sh ignore-src - npm config set //pkg-src.nocobase.com/:_authToken=${{ env.PKG_SRC_NOCOBASE_TOKEN }} - yarn release:force --no-verify-access --no-git-reset --registry https://pkg-src.nocobase.com --dist-tag=next - - name: Tag - run: | - git reset --hard HEAD~ - git tag v${{ env.NEWVERSION }} - git push origin v${{ env.NEWVERSION }} - cd ./packages/pro-plugins - git reset --hard - git tag v${{ env.NEWVERSION }} - git push origin v${{ env.NEWVERSION }} - cd ../../ - for repo in ${{ join(fromJSON(vars.NEXT_PRO_PLUGIN_REPOS), ' ') }} ${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ' ') }} - do - cd ./packages/pro-plugins/@nocobase/$repo - git reset --hard - git tag v${{ env.NEWVERSION }} - git push origin v${{ env.NEWVERSION }} - cd ../../../../ - done - - name: Run release script - shell: bash - run: | - git fetch - node scripts/release/changelogAndRelease.js --ver alpha --cmsURL ${{ secrets.CMS_URL }} --cmsToken ${{ secrets.CMS_TOKEN }} - env: - PRO_PLUGIN_REPOS: ${{ vars.NEXT_PRO_PLUGIN_REPOS }} - GH_TOKEN: ${{ steps.app-token.outputs.token }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 91e10de10..9fa79d639 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,22 +7,34 @@ concurrency: on: push: tags: - - 'v*-beta' + - 'v*' jobs: publish-npm: runs-on: ubuntu-latest container: node:18 steps: + - name: Get info + id: get-info + run: | + if [[ "${{ github.ref_name }}" =~ "beta" ]]; then + echo "defaultTag=$(echo 'latest')" >> $GITHUB_OUTPUT + echo "proRepos=$(echo '${{ vars.PRO_PLUGIN_REPOS }}')" >> $GITHUB_OUTPUT + else + echo "defaultTag=$(echo 'next')" >> $GITHUB_OUTPUT + echo "proRepos=$(echo '${{ vars.NEXT_PRO_PLUGIN_REPOS }}')" >> $GITHUB_OUTPUT + fi - uses: actions/create-github-app-token@v1 id: app-token with: app-id: ${{ vars.NOCOBASE_APP_ID }} private-key: ${{ secrets.NOCOBASE_APP_PRIVATE_KEY }} - repositories: nocobase,pro-plugins,${{ join(fromJSON(vars.PRO_PLUGIN_REPOS), ',') }},${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ',') }} + repositories: nocobase,pro-plugins,${{ join(fromJSON(steps.get-info.outputs.proRepos), ',') }},${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ',') }} skip-token-revoke: true - name: Checkout uses: actions/checkout@v3 + with: + ref: ${{ github.ref_name }} - name: Send curl request and parse response env: PKG_USERNAME: ${{ secrets.PKG_USERNAME }} @@ -67,13 +79,14 @@ jobs: with: repository: nocobase/pro-plugins path: packages/pro-plugins + ref: ${{ github.ref_name }} token: ${{ steps.app-token.outputs.token }} - name: Clone pro repos shell: bash run: | - for repo in ${{ join(fromJSON(vars.PRO_PLUGIN_REPOS), ' ') }} ${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ' ') }} + for repo in ${{ join(fromJSON(steps.get-info.outputs.proRepos), ' ') }} ${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ' ') }} do - git clone -b main https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/nocobase/$repo.git packages/pro-plugins/@nocobase/$repo + git clone -b ${{ github.ref_name }} https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/nocobase/$repo.git packages/pro-plugins/@nocobase/$repo done - name: Build Pro plugins run: | @@ -129,4 +142,4 @@ jobs: context: ./docker/nocobase platforms: linux/amd64,linux/arm64 push: true - tags: nocobase/nocobase:latest,${{ steps.meta.outputs.tags }},${{ secrets.ALI_DOCKER_PUBLIC_REGISTRY }}/nocobase/nocobase:latest,${{ secrets.ALI_DOCKER_PUBLIC_REGISTRY }}/${{ steps.meta.outputs.tags }} + tags: nocobase/nocobase:${{ steps.get-info.outputs.defaultTag }},${{ steps.meta.outputs.tags }},${{ secrets.ALI_DOCKER_PUBLIC_REGISTRY }}/nocobase/nocobase:${{ steps.get-info.outputs.defaultTag }},${{ secrets.ALI_DOCKER_PUBLIC_REGISTRY }}/${{ steps.meta.outputs.tags }}