name: Build pro plugin docker image concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.pro_plugin }}-${{ inputs.pr_number }}-${{ inputs.nocobase_pr_number }} cancel-in-progress: true run-name: Build pro plugin image ${{ github.ref }}-${{ inputs.pro_plugin }}-${{ inputs.pr_number }}-${{ inputs.nocobase_pr_number }} on: workflow_dispatch: inputs: pro_plugin: description: 'Please enter a pro plugin name' required: true pr_number: description: 'Please enter the pr number of pro plugin repository' required: false nocobase_pr_number: description: 'Please enter the pr number of nocobase/nocobase repository' required: false jobs: build-and-push: runs-on: ubuntu-latest services: verdaccio: image: verdaccio/verdaccio:latest ports: - 4873:4873 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,plugin-${{ inputs.pro_plugin }},${{ join(fromJSON(vars.NEXT_PRO_PLUGIN_REPOS), ',') }},${{ join(fromJSON(vars.CUSTOM_PRO_PLUGIN_REPOS), ',') }} skip-token-revoke: true - name: Checkout nocobase/nocobase uses: actions/checkout@v4 with: ref: ${{ github.head_ref || github.ref_name }} fetch-depth: 0 - name: Checkout nocobase/nocobase pr if: ${{ inputs.nocobase_pr_number != '' }} shell: bash run: | gh pr checkout ${{ inputs.nocobase_pr_number }} env: GITHUB_TOKEN: ${{ steps.app-token.outputs.token }} - name: Checkout plugin uses: actions/checkout@v3 with: ref: ${{ github.head_ref || github.ref_name }} token: ${{ steps.app-token.outputs.token }} repository: nocobase/plugin-${{ inputs.pro_plugin }} path: packages/pro-plugins/@nocobase/plugin-${{ inputs.pro_plugin }} - name: Checkout pr if: ${{ inputs.pr_number != '' }} shell: bash run: | cd ./packages/pro-plugins/@nocobase/plugin-${{ inputs.pro_plugin }} gh pr checkout ${{ inputs.pr_number }} cd ../../../../ env: GITHUB_TOKEN: ${{ steps.app-token.outputs.token }} - name: rm .git run: rm -rf packages/pro-plugins/@nocobase/plugin-${{ inputs.pro_plugin }}/.git && git config --global user.email "you@example.com" && git config --global user.name "Your Name" && git add -A && git commit -m "tmp commit" - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: driver-opts: network=host - name: Login to Aliyun Container Registry uses: docker/login-action@v2 with: registry: ${{ secrets.ALI_DOCKER_REGISTRY }} username: ${{ secrets.ALI_DOCKER_USERNAME }} 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 }}-${{ inputs.pro_plugin }}" - name: IMAGE_TAG env: IMAGE_TAG: ${{ steps.get-tag.outputs.tag }} run: | echo $IMAGE_TAG - name: Set variables run: | target_directory="./packages/pro-plugins/@nocobase" subdirectories=$(find "$target_directory" -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | tr '\n' ' ') trimmed_variable=$(echo "$subdirectories" | xargs) packageNames="@nocobase/${trimmed_variable// / @nocobase/}" pluginNames="${trimmed_variable//plugin-/}" BEFORE_PACK_NOCOBASE="yarn add $packageNames -W" APPEND_PRESET_LOCAL_PLUGINS="${pluginNames// /,}" echo "var1=$BEFORE_PACK_NOCOBASE" >> $GITHUB_OUTPUT echo "var2=$APPEND_PRESET_LOCAL_PLUGINS" >> $GITHUB_OUTPUT id: vars - name: Build and push uses: docker/build-push-action@v3 with: context: . file: Dockerfile build-args: | VERDACCIO_URL=http://localhost:4873/ COMMIT_HASH=${GITHUB_SHA} PLUGINS_DIRS=pro-plugins BEFORE_PACK_NOCOBASE=${{ steps.vars.outputs.var1 }} APPEND_PRESET_LOCAL_PLUGINS=${{ steps.vars.outputs.var2 }} push: true tags: ${{ steps.set-tags.outputs.tags }} - name: Deploy NocoBase env: IMAGE_TAG: ${{ steps.get-tag.outputs.tag }} run: | echo $IMAGE_TAG export APP_NAME=$(echo $IMAGE_TAG | cut -d ":" -f 2)-${{ inputs.pro_plugin }} echo $APP_NAME curl --retry 2 --location --request POST "${{secrets.NOCOBASE_DEPLOY_HOST}}$APP_NAME" \ --header 'Content-Type: application/json' \ -d "{ \"tag\": \"$APP_NAME\", \"dialect\": \"postgres\" }"