chore(ci): optimize

This commit is contained in:
xilesun 2024-10-23 16:47:47 +08:00
parent 4203b7c7d5
commit 2989215d0f
4 changed files with 150 additions and 140 deletions

View File

@ -22,31 +22,33 @@ jobs:
write-changelog-and-release: write-changelog-and-release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Get info
id: get-info
run: |
if [[ "${{ inputs.version }}" == "alpha" ]]; then
echo "branch=$(echo 'next')" >> $GITHUB_OUTPUT
echo "proRepos=$(echo '${{ vars.NEXT_PRO_PLUGIN_REPOS }}')" >> $GITHUB_OUTPUT
else
echo "branch=$(echo 'main')" >> $GITHUB_OUTPUT
echo "proRepos=$(echo '${{ vars.PRO_PLUGIN_REPOS }}')" >> $GITHUB_OUTPUT
fi
- uses: actions/create-github-app-token@v1 - uses: actions/create-github-app-token@v1
id: app-token id: app-token
with: with:
app-id: ${{ vars.NOCOBASE_APP_ID }} app-id: ${{ vars.NOCOBASE_APP_ID }}
private-key: ${{ secrets.NOCOBASE_APP_PRIVATE_KEY }} private-key: ${{ secrets.NOCOBASE_APP_PRIVATE_KEY }}
repositories: nocobase,pro-plugins,${{ join(fromJSON(vars.PRO_PLUGIN_REPOS), ',') }} repositories: nocobase,pro-plugins,${{ join(fromJSON(steps.get-info.outputs.proRepos), ',') }}
skip-token-revoke: true skip-token-revoke: true
- name: Get GitHub App User ID - name: Get GitHub App User ID
id: get-user-id id: get-user-id
run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT" run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT"
env: env:
GH_TOKEN: ${{ steps.app-token.outputs.token }} GH_TOKEN: ${{ steps.app-token.outputs.token }}
- name: Get branch
id: get-branch
run: |
if [[ "${{ inputs.version }}" == "alpha" ]]; then
echo "branch=$(echo 'next')" >> $GITHUB_OUTPUT
else
echo "branch=$(echo 'main')" >> $GITHUB_OUTPUT
fi
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
repository: nocobase/nocobase repository: nocobase/nocobase
ref: ${{ steps.get-branch.outputs.branch }} ref: ${{ steps.get-info.outputs.branch }}
token: ${{ steps.app-token.outputs.token }} token: ${{ steps.app-token.outputs.token }}
persist-credentials: true persist-credentials: true
fetch-depth: 0 fetch-depth: 0
@ -55,16 +57,16 @@ jobs:
with: with:
repository: nocobase/pro-plugins repository: nocobase/pro-plugins
path: packages/pro-plugins path: packages/pro-plugins
ref: ${{ steps.get-branch.outputs.branch }} ref: ${{ steps.get-info.outputs.branch }}
fetch-depth: 0 fetch-depth: 0
token: ${{ steps.app-token.outputs.token }} token: ${{ steps.app-token.outputs.token }}
persist-credentials: true persist-credentials: true
- name: Clone pro repos - name: Clone pro repos
shell: bash shell: bash
run: | run: |
for repo in ${{ join(fromJSON(vars.PRO_PLUGIN_REPOS), ' ') }} for repo in ${{ join(fromJSON(steps.get-info.outputs.proRepos), ' ') }}
do do
git clone -b ${{ steps.get-branch.outputs.branch }} https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/nocobase/$repo.git packages/pro-plugins/@nocobase/$repo git clone -b ${{ steps.get-info.outputs.branch }} https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/nocobase/$repo.git packages/pro-plugins/@nocobase/$repo
done done
- name: Set user - name: Set user
run: | run: |
@ -81,7 +83,7 @@ jobs:
run: | run: |
node scripts/release/changelogAndRelease.js --ver ${{ inputs.version }} --cmsURL ${{ secrets.CMS_URL }} --cmsToken ${{ secrets.CMS_TOKEN }} node scripts/release/changelogAndRelease.js --ver ${{ inputs.version }} --cmsURL ${{ secrets.CMS_URL }} --cmsToken ${{ secrets.CMS_TOKEN }}
env: env:
PRO_PLUGIN_REPOS: ${{ vars.PRO_PLUGIN_REPOS }} PRO_PLUGIN_REPOS: ${{ steps.get-info.outputs.proRepos }}
GH_TOKEN: ${{ steps.app-token.outputs.token }} GH_TOKEN: ${{ steps.app-token.outputs.token }}
- name: Commit and push - name: Commit and push
run: | run: |

View File

@ -88,23 +88,24 @@ jobs:
uses: docker/setup-buildx-action@v2 uses: docker/setup-buildx-action@v2
with: with:
driver-opts: network=host driver-opts: network=host
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: |
nocobase/nocobase
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- name: Login to Aliyun Container Registry - name: Login to Aliyun Container Registry
uses: docker/login-action@v2 uses: docker/login-action@v2
with: with:
registry: ${{ secrets.ALI_DOCKER_REGISTRY }} registry: ${{ secrets.ALI_DOCKER_REGISTRY }}
username: ${{ secrets.ALI_DOCKER_USERNAME }} username: ${{ secrets.ALI_DOCKER_USERNAME }}
password: ${{ secrets.ALI_DOCKER_PASSWORD }} password: ${{ secrets.ALI_DOCKER_PASSWORD }}
- name: Get tag
id: get-tag
run: |
if [ "${{ inputs.pr_number }}" != "" ]; then
echo "tag=pr-${{ inputs.pr_number }}" >> "$GITHUB_OUTPUT"
else
echo "tag=${{ github.head_ref || github.ref_name }}" >> "$GITHUB_OUTPUT"
fi
- name: Set tags
id: set-tags
run: |
echo "::set-output name=tags::${{ secrets.ALI_DOCKER_REGISTRY }}/nocobase/nocobase:${{ steps.get-tag.outputs.tag }}-pro
- name: Set variables - name: Set variables
run: | run: |
target_directory="./packages/pro-plugins/@nocobase" target_directory="./packages/pro-plugins/@nocobase"
@ -117,7 +118,7 @@ jobs:
echo "var1=$BEFORE_PACK_NOCOBASE" >> $GITHUB_OUTPUT echo "var1=$BEFORE_PACK_NOCOBASE" >> $GITHUB_OUTPUT
echo "var2=$APPEND_PRESET_LOCAL_PLUGINS" >> $GITHUB_OUTPUT echo "var2=$APPEND_PRESET_LOCAL_PLUGINS" >> $GITHUB_OUTPUT
id: vars id: vars
- name: Build and push - pr-${{ inputs.pr_number }}-pro - name: Build and push - ${{ steps.get-tag.outputs.tag }}-pro
uses: docker/build-push-action@v3 uses: docker/build-push-action@v3
with: with:
context: . context: .
@ -129,12 +130,12 @@ jobs:
BEFORE_PACK_NOCOBASE=${{ steps.vars.outputs.var1 }} BEFORE_PACK_NOCOBASE=${{ steps.vars.outputs.var1 }}
APPEND_PRESET_LOCAL_PLUGINS=${{ steps.vars.outputs.var2 }} APPEND_PRESET_LOCAL_PLUGINS=${{ steps.vars.outputs.var2 }}
push: true push: true
tags: ${{ secrets.ALI_DOCKER_REGISTRY }}/nocobase/nocobase:pr-${{ inputs.pr_number }}-pro tags: ${{ steps.set-tags.outputs.tags }}
- name: Deploy NocoBase - name: Deploy NocoBase
run: | run: |
curl --retry 2 --location --request POST "${{secrets.NOCOBASE_DEPLOY_HOST}}pr-${{ inputs.pr_number }}-pro" \ curl --retry 2 --location --request POST "${{secrets.NOCOBASE_DEPLOY_HOST}}${{ steps.get-tag.outputs.tag }}-pro" \
--header 'Content-Type: application/json' \ --header 'Content-Type: application/json' \
-d "{ -d "{
\"tag\": \"pr-${{ inputs.pr_number }}-pro\", \"tag\": \"${{ steps.get-tag.outputs.tag }}-pro\",
\"dialect\": \"postgres\" \"dialect\": \"postgres\"
}" }"

View File

@ -6,6 +6,9 @@ concurrency:
on: on:
workflow_dispatch: workflow_dispatch:
push:
branches:
- chore/ci
jobs: jobs:
publish-npm: publish-npm:
@ -29,71 +32,71 @@ jobs:
with: with:
ref: next ref: next
fetch-depth: 0 fetch-depth: 0
- name: Send curl request and parse response # - name: Send curl request and parse response
env: # env:
PKG_USERNAME: ${{ secrets.PKG_USERNAME }} # PKG_USERNAME: ${{ secrets.PKG_USERNAME }}
PKG_PASSWORD: ${{ secrets.PKG_PASSWORD }} # PKG_PASSWORD: ${{ secrets.PKG_PASSWORD }}
run: | # run: |
mkdir git-ci-cache # mkdir git-ci-cache
apt-get update && apt-get install -y jq gh # apt-get update && apt-get install -y jq gh
response1=$(curl -s 'https://pkg.nocobase.com/-/verdaccio/sec/login' \ # response1=$(curl -s 'https://pkg.nocobase.com/-/verdaccio/sec/login' \
-H 'content-type: application/json' \ # -H 'content-type: application/json' \
--data-raw '{"username":"'$PKG_USERNAME'","password":"'$PKG_PASSWORD'"}') # --data-raw '{"username":"'$PKG_USERNAME'","password":"'$PKG_PASSWORD'"}')
token1=$(echo $response1 | jq -r '.token') # token1=$(echo $response1 | jq -r '.token')
response2=$(curl -s 'https://pkg-src.nocobase.com/-/verdaccio/sec/login' \ # response2=$(curl -s 'https://pkg-src.nocobase.com/-/verdaccio/sec/login' \
-H 'content-type: application/json' \ # -H 'content-type: application/json' \
--data-raw '{"username":"'$PKG_USERNAME'","password":"'$PKG_PASSWORD'"}') # --data-raw '{"username":"'$PKG_USERNAME'","password":"'$PKG_PASSWORD'"}')
token2=$(echo $response2 | jq -r '.token') # token2=$(echo $response2 | jq -r '.token')
echo "PKG_NOCOBASE_TOKEN=$token1" >> $GITHUB_ENV # echo "PKG_NOCOBASE_TOKEN=$token1" >> $GITHUB_ENV
echo "PKG_SRC_NOCOBASE_TOKEN=$token2" >> $GITHUB_ENV # echo "PKG_SRC_NOCOBASE_TOKEN=$token2" >> $GITHUB_ENV
- name: restore cache # - name: restore cache
id: cache # id: cache
uses: actions/cache@v3 # uses: actions/cache@v3
with: # with:
path: ./git-ci-cache # path: ./git-ci-cache
key: new-next-version-${{ github.run_id }} # key: new-next-version-${{ github.run_id }}
- name: Set NEWVERSION variable # - name: Set NEWVERSION variable
id: set_version # id: set_version
run: | # run: |
cd ./git-ci-cache # cd ./git-ci-cache
if [ -f newversion.txt ]; then # if [ -f newversion.txt ]; then
NEWVERSION=$(cat newversion.txt) # NEWVERSION=$(cat newversion.txt)
else # else
NEWVERSION=$(cat ../lerna.json | jq -r '.version').$(date +'%Y%m%d%H%M%S') # NEWVERSION=$(cat ../lerna.json | jq -r '.version').$(date +'%Y%m%d%H%M%S')
echo "$NEWVERSION" > newversion.txt # echo "$NEWVERSION" > newversion.txt
fi # fi
echo "NEWVERSION=$NEWVERSION" >> $GITHUB_ENV # echo "NEWVERSION=$NEWVERSION" >> $GITHUB_ENV
- name: Print NEWVERSION # - name: Print NEWVERSION
run: echo "The new version is ${{ env.NEWVERSION }}" # run: echo "The new version is ${{ env.NEWVERSION }}"
- name: Save NEWVERSION to cache # - name: Save NEWVERSION to cache
run: echo "NEWVERSION=$NEWVERSION" >> ./git-ci-cache/newversion.txt # run: echo "NEWVERSION=$NEWVERSION" >> ./git-ci-cache/newversion.txt
- name: save cache # - name: save cache
id: save-cache # id: save-cache
uses: actions/cache/save@v3 # uses: actions/cache/save@v3
if: steps.cache.outputs.cache-hit != 'true' # if: steps.cache.outputs.cache-hit != 'true'
with: # with:
path: ./git-ci-cache # path: ./git-ci-cache
key: new-next-version-${{ github.run_id }} # key: new-next-version-${{ github.run_id }}
- name: publish npmjs.org # - name: publish npmjs.org
continue-on-error: true # continue-on-error: true
run: | # run: |
git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]' # 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 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 # git config --global --add safe.directory /__w/nocobase/nocobase
npm config set access public # npm config set access public
npm config set registry https://registry.npmjs.org/ # npm config set registry https://registry.npmjs.org/
npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} # npm config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}
yarn config set access public # yarn config set access public
yarn config set registry https://registry.npmjs.org/ # yarn config set registry https://registry.npmjs.org/
yarn config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }} # yarn config set //registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}
yarn install # yarn install
yarn lerna version ${{ env.NEWVERSION }} -y --no-git-tag-version # yarn lerna version ${{ env.NEWVERSION }} -y --no-git-tag-version
yarn build # yarn build
echo "# test" >> Release.md # echo "# test" >> Release.md
git add . # git add .
git commit -m "chore(versions): test publish packages xxx" # git commit -m "chore(versions): test publish packages xxx"
cat lerna.json # cat lerna.json
yarn release:force --no-verify-access --no-git-reset --registry https://registry.npmjs.org/ --dist-tag=next # yarn release:force --no-verify-access --no-git-reset --registry https://registry.npmjs.org/ --dist-tag=next
- name: Checkout pro-plugins - name: Checkout pro-plugins
uses: actions/checkout@v3 uses: actions/checkout@v3
with: with:
@ -109,44 +112,45 @@ jobs:
do do
git clone -b next https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/nocobase/$repo.git packages/pro-plugins/@nocobase/$repo git clone -b next https://x-access-token:${{ steps.app-token.outputs.token }}@github.com/nocobase/$repo.git packages/pro-plugins/@nocobase/$repo
done done
- name: Build Pro plugins # - name: Build Pro plugins
run: | # run: |
yarn config set registry https://registry.npmjs.org/ # yarn config set registry https://registry.npmjs.org/
yarn install # yarn install
yarn lerna version ${{ env.NEWVERSION }} -y --no-git-tag-version # yarn lerna version ${{ env.NEWVERSION }} -y --no-git-tag-version
yarn build packages/pro-plugins # yarn build packages/pro-plugins
- name: publish pkg.nocobase.com # - name: publish pkg.nocobase.com
run: | # run: |
git reset --hard # git reset --hard
npm config set //pkg.nocobase.com/:_authToken=${{ env.PKG_NOCOBASE_TOKEN }} # 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 # yarn release:force --no-verify-access --no-git-reset --registry https://pkg.nocobase.com --dist-tag=next
- name: publish pkg-src.nocobase.com # - name: publish pkg-src.nocobase.com
run: | # run: |
git reset --hard # git reset --hard
bash generate-npmignore.sh ignore-src # bash generate-npmignore.sh ignore-src
npm config set //pkg-src.nocobase.com/:_authToken=${{ env.PKG_SRC_NOCOBASE_TOKEN }} # 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 # yarn release:force --no-verify-access --no-git-reset --registry https://pkg-src.nocobase.com --dist-tag=next
- name: Tag # - name: Tag
run: | # run: |
git reset --hard HEAD~ # git reset --hard HEAD~
git tag v${{ env.NEWVERSION }} # git tag v${{ env.NEWVERSION }}
git push origin v${{ env.NEWVERSION }} # git push origin v${{ env.NEWVERSION }}
cd ./packages/pro-plugins # cd ./packages/pro-plugins
git reset --hard # git reset --hard
git tag v${{ env.NEWVERSION }} # git tag v${{ env.NEWVERSION }}
git push origin v${{ env.NEWVERSION }} # git push origin v${{ env.NEWVERSION }}
cd ../../ # cd ../../
for repo in ${{ join(fromJSON(vars.NEXT_PRO_PLUGIN_REPOS), ' ') }} ${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ' ') }} # for repo in ${{ join(fromJSON(vars.NEXT_PRO_PLUGIN_REPOS), ' ') }} ${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ' ') }}
do # do
cd ./packages/pro-plugins/@nocobase/$repo # cd ./packages/pro-plugins/@nocobase/$repo
git reset --hard # git reset --hard
git tag v${{ env.NEWVERSION }} # git tag v${{ env.NEWVERSION }}
git push origin v${{ env.NEWVERSION }} # git push origin v${{ env.NEWVERSION }}
cd ../../../../ # cd ../../../../
done # done
- name: Run release script - name: Run release script
shell: bash shell: bash
run: | run: |
yarn install
git fetch git fetch
node scripts/release/changelogAndRelease.js --ver alpha --cmsURL ${{ secrets.CMS_URL }} --cmsToken ${{ secrets.CMS_TOKEN }} node scripts/release/changelogAndRelease.js --ver alpha --cmsURL ${{ secrets.CMS_URL }} --cmsToken ${{ secrets.CMS_TOKEN }}
env: env:

View File

@ -344,11 +344,11 @@ async function createRelease(cn, en, to) {
} }
let { ver = 'beta' } = program.opts(); let { ver = 'beta' } = program.opts();
// gh release create -t title -n note // gh release create -t title -n note
if (ver === 'alpha') { // if (ver === 'alpha') {
await execa('gh', ['release', 'create', to, '-t', to, '-n', en, '-p']); // await execa('gh', ['release', 'create', to, '-t', to, '-n', en, '-p']);
return; // return;
} // }
await execa('gh', ['release', 'create', to, '-t', to, '-n', en]); // await execa('gh', ['release', 'create', to, '-t', to, '-n', en]);
} }
async function getExistsChangelog(from, to) { async function getExistsChangelog(from, to) {
@ -381,7 +381,7 @@ async function getVersion() {
return { from, to }; return { from, to };
} }
async function postCMS(title, content, contentCN) { async function postCMS(tag, content, contentCN) {
const { cmsToken, cmsURL } = program.opts(); const { cmsToken, cmsURL } = program.opts();
if (!cmsToken || !cmsURL) { if (!cmsToken || !cmsURL) {
console.error('No cmsToken or cmsURL provided'); console.error('No cmsToken or cmsURL provided');
@ -394,13 +394,16 @@ async function postCMS(title, content, contentCN) {
Authorization: `Bearer ${cmsToken}`, Authorization: `Bearer ${cmsToken}`,
}, },
params: { params: {
filterKeys: ['title'], filterKeys: ['slug'],
}, },
data: { data: {
title, slug: tag,
title_cn: title, title: `Nocobase ${tag}`,
title_cn: `Nocobase ${tag}`,
content, content,
content_cn: contentCN, content_cn: contentCN,
description: `Release Note of ${tag}`,
description_cn: `${tag} 更新日志`,
tags: [4], tags: [4],
status: 'drafted', status: 'drafted',
author: 'nocobase [bot]', author: 'nocobase [bot]',
@ -432,10 +435,10 @@ async function writeChangelogAndCreateRelease() {
return; return;
} }
if (ver === 'beta' && !exists) { if (ver === 'beta' && !exists) {
await writeChangelog(cn, en, from, to); // await writeChangelog(cn, en, from, to);
} }
await createRelease(cn, en, to); await createRelease(cn, en, to);
await postCMS(to, en, cn); // await postCMS(to, en, cn);
} }
writeChangelogAndCreateRelease(); writeChangelogAndCreateRelease();