Deploy #72
This file contains 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 | |
on: | |
workflow_dispatch: ~ | |
schedule: | |
# Run daily at 3:47 UTC | |
- cron: '47 3 * * *' | |
jobs: | |
deploy-proxy: | |
name: Deploy proxy | |
runs-on: ubuntu-latest | |
environment: proxy-production | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Setup Fly | |
uses: superfly/flyctl-actions/setup-flyctl@master | |
- name: Deploy | |
env: | |
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} | |
run: | | |
flyctl deploy --config proxy.fly.toml --local-only | |
update-data: | |
name: Update data | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
# The disk and memory in the Github runners is too small to do large imports. | |
# A Docker image with a pre-imported database state is used. | |
# During the deployment run, the docker image is updated through the replication updated, | |
# built into a new image and pushed for future use. | |
- name: Pull import database | |
run: | | |
docker compose pull db | |
docker image ls ghcr.io/hiddewie/openrailwaymap-import-db:latest | |
docker compose up --no-build --pull never --wait db | |
- name: Ensure data is up to date | |
env: | |
# Available cores: 4 | |
OSM2PGSQL_NUMPROC: 4 | |
# Available memory: 16GB | |
OSM2PGSQL_CACHE: 14000 | |
run: | | |
docker compose build import | |
docker compose run import update | |
docker compose push import | |
- name: Commit and push new database image | |
run: | | |
docker compose stop db | |
DB_CONTAINER_ID="$(docker compose ps --all --format json | jq -r 'select(.Service == "db") | .ID')" | |
DB_IMAGE="$(docker compose ps --all --format json | jq -r 'select(.Service == "db") | .Image')" | |
# Persist and squash data in new image | |
docker cp "$DB_CONTAINER_ID:/var/lib/postgresql/postgres-data" db/postgres-data | |
echo 'COPY postgres-data /var/lib/postgresql/postgres-data' >> db/Dockerfile | |
- name: Clean up unused Docker system data | |
run: | | |
docker system prune --force --all --volumes | |
- name: Push | |
id: docker_build | |
uses: docker/build-push-action@v5 | |
with: | |
context: db | |
load: false | |
push: true | |
tags: ghcr.io/hiddewie/openrailwaymap-import-db:latest | |
generate-tiles: | |
name: Generate tiles | |
runs-on: ubuntu-latest | |
needs: update-data | |
strategy: | |
matrix: | |
tiles: | |
- low-med | |
- standard | |
- speed | |
- signals | |
- electrification | |
- gauge | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Pull database | |
run: | | |
docker compose pull db | |
docker compose up --no-build --pull never --wait db | |
- name: Generate tiles | |
env: | |
TILES: ${{ matrix.tiles }} | |
run: | | |
docker compose run martin-cp | |
ls -las tiles/ | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: tiles-${{ matrix.tiles }} | |
path: | | |
tiles/*.mbtiles | |
if-no-files-found: error | |
retention-days: 3 | |
deploy-tiles: | |
name: Deploy tiles | |
runs-on: ubuntu-latest | |
needs: generate-tiles | |
environment: tiles-production | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Setup Fly | |
uses: superfly/flyctl-actions/setup-flyctl@master | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- uses: actions/download-artifact@v4 | |
with: | |
# No name: download everything | |
path: tiles | |
merge-multiple: true | |
- name: List generated tiles | |
run: | | |
ls -lah tiles/ | |
- name: Deploy | |
env: | |
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} | |
run: | | |
flyctl deploy --config martin-static.fly.toml --local-only |