Merge pull request #591 from DataIntegrationGroup/water-elevation-layer #290
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: CD (Staging) | |
| on: | |
| push: | |
| branches: [staging] | |
| permissions: | |
| contents: write | |
| jobs: | |
| staging-deploy: | |
| runs-on: ubuntu-latest | |
| environment: staging | |
| steps: | |
| - name: Check out source repository | |
| uses: actions/checkout@v6.0.2 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install uv in container | |
| uses: astral-sh/setup-uv@v7.3.1 | |
| with: | |
| version: "latest" | |
| - name: Generate requirements.txt | |
| run: | | |
| uv export \ | |
| --format requirements-txt \ | |
| --no-emit-project \ | |
| --no-dev \ | |
| --output-file requirements.txt | |
| - name: Authenticate to Google Cloud | |
| uses: 'google-github-actions/auth@v3' | |
| with: | |
| credentials_json: ${{ secrets.CLOUD_DEPLOY_SERVICE_ACCOUNT_KEY }} | |
| - name: Run Alembic migrations on staging database | |
| env: | |
| DB_DRIVER: "cloudsql" | |
| CLOUD_SQL_INSTANCE_NAME: "${{ secrets.CLOUD_SQL_INSTANCE_NAME }}" | |
| CLOUD_SQL_DATABASE: "${{ vars.CLOUD_SQL_DATABASE }}" | |
| CLOUD_SQL_USER: "${{ secrets.CLOUD_SQL_USER }}" | |
| CLOUD_SQL_IAM_AUTH: true | |
| run: | | |
| uv run alembic upgrade head | |
| - name: Ensure envsubst is available | |
| run: | | |
| if ! command -v envsubst >/dev/null 2>&1; then | |
| sudo apt-get update | |
| sudo apt-get install -y gettext-base | |
| fi | |
| - name: Render app.yaml | |
| env: | |
| SERVICE_NAME: "ocotillo-api-staging" | |
| ENVIRONMENT: "staging" | |
| CLOUD_SQL_INSTANCE_NAME: "${{ secrets.CLOUD_SQL_INSTANCE_NAME }}" | |
| CLOUD_SQL_DATABASE: "${{ vars.CLOUD_SQL_DATABASE }}" | |
| CLOUD_SQL_USER: "${{ secrets.CLOUD_SQL_USER }}" | |
| PYGEOAPI_POSTGRES_DB: "${{ vars.CLOUD_SQL_DATABASE }}" | |
| PYGEOAPI_POSTGRES_USER: "${{ secrets.PYGEOAPI_POSTGRES_USER }}" | |
| PYGEOAPI_POSTGRES_HOST: "${{ vars.PYGEOAPI_POSTGRES_HOST || '127.0.0.1' }}" | |
| PYGEOAPI_POSTGRES_PORT: "${{ vars.PYGEOAPI_POSTGRES_PORT || '5432' }}" | |
| PYGEOAPI_POSTGRES_PASSWORD: "${{ secrets.PYGEOAPI_POSTGRES_PASSWORD }}" | |
| PYGEOAPI_SERVER_URL: "${{ vars.PYGEOAPI_SERVER_URL }}" | |
| CLOUD_SQL_IAM_AUTH: "true" | |
| GCS_SERVICE_ACCOUNT_KEY: "${{ secrets.GCS_SERVICE_ACCOUNT_KEY }}" | |
| GCS_BUCKET_NAME: "${{ vars.GCS_BUCKET_NAME }}" | |
| AUTHENTIK_URL: "${{ vars.AUTHENTIK_URL }}" | |
| AUTHENTIK_CLIENT_ID: "${{ vars.AUTHENTIK_CLIENT_ID }}" | |
| AUTHENTIK_AUTHORIZE_URL: "${{ vars.AUTHENTIK_AUTHORIZE_URL }}" | |
| AUTHENTIK_TOKEN_URL: "${{ vars.AUTHENTIK_TOKEN_URL }}" | |
| SESSION_SECRET_KEY: "${{ secrets.SESSION_SECRET_KEY }}" | |
| APITALLY_CLIENT_ID: "${{ vars.APITALLY_CLIENT_ID }}" | |
| run: | | |
| envsubst < .github/app.template.yaml > app.yaml | |
| - name: Deploy to Google Cloud | |
| run: | | |
| gcloud app deploy app.yaml --quiet --project ${{ vars.GCP_PROJECT_ID }} | |
| # Clean up old versions - delete only the oldest version, one created and one destroyed | |
| - name: Clean up oldest version | |
| run: | | |
| OLDEST_VERSION=$(gcloud app versions list --service=ocotillo-api-staging --project=${{ vars.GCP_PROJECT_ID}} --format="value(id)" --sort-by="version.createTime" | head -n 1) | |
| if [ ! -z "$OLDEST_VERSION" ]; then | |
| echo "Deleting oldest version: $OLDEST_VERSION" | |
| gcloud app versions delete $OLDEST_VERSION --service=ocotillo-api-staging --project=${{ vars.GCP_PROJECT_ID }} --quiet | |
| echo "Deleted oldest version: $OLDEST_VERSION" | |
| else | |
| echo "No versions to delete" | |
| fi | |
| - name: Remove app.yaml | |
| run: | | |
| rm app.yaml | |
| # Use PR author's username as git user name | |
| - name: Set up git user | |
| run: | | |
| git config --global user.name "${{ github.actor }}" | |
| git config --global user.email "${{ github.actor }}@users.noreply.github.com" | |
| # ":" are not alloed in git tags, so replace with "-" | |
| - name: Tag commit | |
| run: | | |
| git tag -a "staging-deploy-$(date -u +%Y-%m-%d)T$(date -u +%H-%M-%S%z)" -m "staging gcloud deployment: $(date -u +%Y-%m-%d)T$(date -u +%H:%M:%S%z)" | |
| git push origin --tags |