diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index f8f0087..2225e11 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -17,9 +17,9 @@ jobs: - run: uv run pytest web/tests/ -x -q -p no:faulthandler - run: uv run ruff check web/src/ web/tests/ - # Creates v tag after tests pass. The on-server supervisor polls for new - # tags every 60s and deploys automatically. No SSH keys or deploy credentials - # needed in CI — only the built-in github.token. + # Creates a v{YYYYMMDDHHMM} tag after tests pass on master. + # The on-server supervisor polls for new tags every 60s and deploys + # automatically. No SSH keys or deploy credentials needed in CI. tag: needs: [test] runs-on: ubuntu-latest @@ -32,5 +32,6 @@ jobs: run: | git config user.name "CI" git config user.email "ci@noreply" - git tag "v${{ github.run_number }}" - git push origin "v${{ github.run_number }}" + TAG="v$(date -u +%Y%m%d%H%M)" + git tag "$TAG" + git push origin "$TAG" diff --git a/src/padelnomics/supervisor.py b/src/padelnomics/supervisor.py index 8815c90..d5cd8f4 100644 --- a/src/padelnomics/supervisor.py +++ b/src/padelnomics/supervisor.py @@ -327,6 +327,10 @@ def git_pull_and_sync() -> None: run_shell(f"git checkout --detach {latest}") run_shell("sops --input-type dotenv --output-type dotenv -d .env.prod.sops > .env") run_shell("uv sync --all-packages") + # Re-exec so the new code is loaded. os.execv replaces this process in-place; + # systemd sees it as the same PID and does not restart the unit. + logger.info("Deploy complete — re-execing to load new code") + os.execv(sys.executable, sys.argv) # ---------------------------------------------------------------------------