From d55b79a9ff1308121347f41e275be0dc1f9b3c16 Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Mon, 25 May 2026 19:33:59 -0500 Subject: [PATCH] feat(ci): enable maintenance mode during deployments The deploy workflow now: 1. Enables maintenance mode before building (users see maintenance page) 2. Builds, pushes, and restarts the container 3. Disables maintenance mode after health check passes (if: always) Uses Gitea's built-in maintenance mode via admin config API. If the instance is already down, the enable step gracefully warns instead of failing. The disable step runs even if deploy fails to avoid leaving the instance in maintenance mode. Co-Authored-By: Claude Opus 4.6 (1M context) --- .mokogitea/workflows/deploy-mokogitea.yml | 34 +++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/.mokogitea/workflows/deploy-mokogitea.yml b/.mokogitea/workflows/deploy-mokogitea.yml index ea35000e10..188266406b 100644 --- a/.mokogitea/workflows/deploy-mokogitea.yml +++ b/.mokogitea/workflows/deploy-mokogitea.yml @@ -8,7 +8,7 @@ on: workflow_dispatch: inputs: version: - description: 'Version tag (e.g. v1.26.1-moko.04.00.00)' + description: 'Version tag (e.g. v1.26.1-moko.05.01.00)' required: true default: 'latest' environment: @@ -30,6 +30,7 @@ env: DEPLOY_HOST: git.mokoconsulting.tech DEPLOY_PORT: 2918 DEPLOY_USER: mokoconsulting + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true jobs: deploy: @@ -47,15 +48,30 @@ jobs: echo "source_dir=/opt/gitea/source" >> $GITHUB_OUTPUT echo "branch=main" >> $GITHUB_OUTPUT echo "tag=${VERSION}" >> $GITHUB_OUTPUT + echo "instance_url=https://git.mokoconsulting.tech" >> $GITHUB_OUTPUT else echo "compose_dir=/opt/gitea-dev" >> $GITHUB_OUTPUT echo "container=mokogitea-dev" >> $GITHUB_OUTPUT echo "source_dir=/opt/gitea-dev/source" >> $GITHUB_OUTPUT echo "branch=dev" >> $GITHUB_OUTPUT echo "tag=${VERSION}-dev" >> $GITHUB_OUTPUT + echo "instance_url=https://git.dev.mokoconsulting.tech" >> $GITHUB_OUTPUT fi - - name: Build, push, and deploy via SSH + - name: Enable maintenance mode + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + INSTANCE_URL: ${{ steps.config.outputs.instance_url }} + run: | + echo "Enabling maintenance mode on ${INSTANCE_URL}..." + curl -sf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/x-www-form-urlencoded" \ + "${INSTANCE_URL}/-/admin/config" \ + -d 'key=instance.maintenance_mode&value={"AdminWebAccessOnly":true}' \ + || echo "WARNING: Could not enable maintenance mode (instance may be down)" + + - name: Build and deploy via SSH env: SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_SSH_KEY }} TAG: ${{ steps.config.outputs.tag }} @@ -124,6 +140,20 @@ jobs: exit 1 " + - name: Disable maintenance mode + if: always() + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} + INSTANCE_URL: ${{ steps.config.outputs.instance_url }} + run: | + echo "Disabling maintenance mode on ${INSTANCE_URL}..." + curl -sf -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/x-www-form-urlencoded" \ + "${INSTANCE_URL}/-/admin/config" \ + -d 'key=instance.maintenance_mode&value={"AdminWebAccessOnly":false}' \ + || echo "WARNING: Could not disable maintenance mode" + - name: Verify run: | sleep 5 -- 2.52.0