chore(release): 0.1.17 #19
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy To OVO | |
| on: | |
| push: | |
| tags: | |
| - "v*" | |
| jobs: | |
| deploy: | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| runs-on: ubuntu-latest | |
| environment: production | |
| env: | |
| APP_VERSION: ${{ github.ref_name }} | |
| OVO_RELEASE_VERSION: ${{ github.ref_name }} | |
| OVO_RELEASE_COMMIT: ${{ github.sha }} | |
| OVO_DEPLOY_URL: ${{ secrets.OVO_DEPLOY_URL || vars.OVO_DEPLOY_URL || 'https://ovo.i5lin.top' }} | |
| OVO_DEPLOY_TOKEN: ${{ secrets.OVO_DEPLOY_TOKEN }} | |
| OVO_TARGET_CLIENT_ID: ${{ secrets.OVO_TARGET_CLIENT_ID || vars.OVO_TARGET_CLIENT_ID || '3' }} | |
| OVO_TARGET_SERVICE_ID: ${{ secrets.OVO_TARGET_SERVICE_ID || vars.OVO_TARGET_SERVICE_ID || '9' }} | |
| OVO_DEPLOY_TARGET_ROOT: ${{ secrets.OVO_DEPLOY_TARGET_ROOT || vars.OVO_DEPLOY_TARGET_ROOT || '/opt/codia' }} | |
| OVO_DOCKER_NETWORK: ${{ secrets.OVO_DOCKER_NETWORK || vars.OVO_DOCKER_NETWORK || 'web' }} | |
| OVO_COMPOSE_PROJECT_NAME: ${{ secrets.OVO_COMPOSE_PROJECT_NAME || vars.OVO_COMPOSE_PROJECT_NAME || 'codia' }} | |
| OVO_CONTAINER_NAME: ${{ secrets.OVO_CONTAINER_NAME || vars.OVO_CONTAINER_NAME || 'codia' }} | |
| DATABASE_DIR: ${{ secrets.DATABASE_DIR || vars.DATABASE_DIR || '/root/apps/codia/databases' }} | |
| OVO_HEALTHCHECK_URL: ${{ secrets.OVO_HEALTHCHECK_URL || vars.OVO_HEALTHCHECK_URL || 'http://127.0.0.1:3000/api/health' }} | |
| OVO_HEALTHCHECK_TIMEOUT_SECONDS: ${{ secrets.OVO_HEALTHCHECK_TIMEOUT_SECONDS || vars.OVO_HEALTHCHECK_TIMEOUT_SECONDS || '60' }} | |
| BUNDLE_ZIP_PASSWORD: ${{ secrets.BUNDLE_ZIP_PASSWORD }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Validate release tag | |
| run: | | |
| case "$GITHUB_REF_NAME" in | |
| v[0-9]*.[0-9]*.[0-9]*) | |
| echo "release_tag=$GITHUB_REF_NAME" | |
| ;; | |
| *) | |
| echo "Release publish only accepts semantic v* tags, got: $GITHUB_REF_NAME" >&2 | |
| exit 1 | |
| ;; | |
| esac | |
| - name: Setup Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: npm | |
| - name: Build OVO release bundle | |
| run: npm run build:release | |
| - name: Print release debug info | |
| run: | | |
| echo "APP_VERSION=$APP_VERSION" | |
| echo "OVO_RELEASE_VERSION=$OVO_RELEASE_VERSION" | |
| echo "OVO_RELEASE_COMMIT=$OVO_RELEASE_COMMIT" | |
| echo "OVO_DEPLOY_URL=$OVO_DEPLOY_URL" | |
| echo "OVO_TARGET_CLIENT_ID=$OVO_TARGET_CLIENT_ID" | |
| echo "OVO_TARGET_SERVICE_ID=$OVO_TARGET_SERVICE_ID" | |
| echo "OVO_DEPLOY_TARGET_ROOT=$OVO_DEPLOY_TARGET_ROOT" | |
| echo "OVO_DOCKER_NETWORK=$OVO_DOCKER_NETWORK" | |
| echo "OVO_COMPOSE_PROJECT_NAME=$OVO_COMPOSE_PROJECT_NAME" | |
| echo "OVO_CONTAINER_NAME=$OVO_CONTAINER_NAME" | |
| echo "DATABASE_DIR=$DATABASE_DIR" | |
| echo "OVO_HEALTHCHECK_URL=$OVO_HEALTHCHECK_URL" | |
| echo "BUNDLE_ZIP_PATH=${BUNDLE_ZIP_PATH:-not-built}" | |
| echo "BUNDLE_RELEASE_TAG=${BUNDLE_RELEASE_TAG:-not-built}" | |
| echo "BUNDLE_NAME=${BUNDLE_NAME:-not-built}" | |
| echo "BUNDLE_SHA256=${BUNDLE_SHA256:-not-built}" | |
| - name: Validate OVO deploy token | |
| run: | | |
| if [ -z "$OVO_DEPLOY_TOKEN" ]; then | |
| echo "OVO_DEPLOY_TOKEN is required. Fill .env.production, run npm run sync:github-production-env, then rerun this workflow." >&2 | |
| exit 1 | |
| fi | |
| - name: Install ovo-ci | |
| run: | | |
| curl -fsSL -H "Authorization: Bearer $OVO_DEPLOY_TOKEN" "$OVO_DEPLOY_URL/install/ovo-ci.sh" \ | |
| | bash -s -- --server "$OVO_DEPLOY_URL" --token "$OVO_DEPLOY_TOKEN" | |
| - name: Publish to OVO | |
| run: | | |
| ovo-ci publish \ | |
| --server "$OVO_DEPLOY_URL" \ | |
| --token "$OVO_DEPLOY_TOKEN" \ | |
| --client-id "$OVO_TARGET_CLIENT_ID" \ | |
| --service-id "$OVO_TARGET_SERVICE_ID" \ | |
| --container-name "$OVO_CONTAINER_NAME" \ | |
| --artifact "$BUNDLE_ZIP_PATH" \ | |
| --bundle-version "$BUNDLE_RELEASE_TAG" \ | |
| --manifest-json "$BUNDLE_MANIFEST_JSON" | |
| - name: Report failure to OVO | |
| if: failure() | |
| continue-on-error: true | |
| run: | | |
| node - <<'NODE' > /tmp/ovo-failure.json | |
| const payload = { | |
| release_id: process.env.OVO_RELEASE_COMMIT || process.env.GITHUB_SHA || "", | |
| service_id: process.env.OVO_TARGET_SERVICE_ID || "9", | |
| target_client_id: process.env.OVO_TARGET_CLIENT_ID || "3", | |
| bundle_name: process.env.BUNDLE_NAME || "", | |
| stage: "github-actions", | |
| status: "failed", | |
| message: `Codia deploy workflow failed: ${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`, | |
| }; | |
| process.stdout.write(JSON.stringify(payload)); | |
| NODE | |
| curl -fsSL \ | |
| -H "Authorization: Bearer $OVO_DEPLOY_TOKEN" \ | |
| -H "Content-Type: application/json" \ | |
| -X POST "$OVO_DEPLOY_URL/api/ci/activities" \ | |
| --data-binary @/tmp/ovo-failure.json | |
| - name: Summary | |
| if: always() | |
| run: | | |
| { | |
| echo "## Codia OVO Deploy" | |
| echo "" | |
| echo "- Release: ${BUNDLE_RELEASE_TAG:-$OVO_RELEASE_VERSION}" | |
| echo "- Target client: $OVO_TARGET_CLIENT_ID" | |
| echo "- Target service: $OVO_TARGET_SERVICE_ID" | |
| echo "- Bundle: ${BUNDLE_ZIP_PATH:-not-built}" | |
| echo "- SHA256: ${BUNDLE_SHA256:-not-built}" | |
| } >> "$GITHUB_STEP_SUMMARY" |