Skip to content

chore(release): 0.1.17 #19

chore(release): 0.1.17

chore(release): 0.1.17 #19

Workflow file for this run

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"