From a0a7b71ef2014a8016ebbfdee239e3652d3eeded Mon Sep 17 00:00:00 2001 From: Christian Fosli Date: Tue, 19 Nov 2024 21:34:45 +0100 Subject: [PATCH] feat: add osm-sync job, add external_id and location_geo to changing room Adds new sync job to pull data from OpenStreetMap, and add new fields to ChangingRoom doc to support this. Updates room-api and review-api accordingly. --- .github/workflows/osm-sync.yaml | 117 + app/islands/Map.tsx | 4 + app/routes/index.tsx | 16 - osm-sync/.gitignore | 1 + osm-sync/Cargo.lock | 2837 ++++++++++++++++++++ osm-sync/Cargo.toml | 16 + osm-sync/Dockerfile | 16 + osm-sync/src/main.rs | 185 ++ osm-sync/src/models.rs | 1 + review-api/Cargo.lock | 41 + review-api/Cargo.toml | 1 + room-api/Cargo.lock | 41 + room-api/Cargo.toml | 1 + room-api/src/create_room.rs | 6 + room-api/src/models.rs | 5 + room-api/src/update_room.rs | 8 + scripts/az-bootstrap-containerapp-job.bash | 38 + 17 files changed, 3318 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/osm-sync.yaml create mode 100644 osm-sync/.gitignore create mode 100644 osm-sync/Cargo.lock create mode 100644 osm-sync/Cargo.toml create mode 100644 osm-sync/Dockerfile create mode 100644 osm-sync/src/main.rs create mode 120000 osm-sync/src/models.rs create mode 100755 scripts/az-bootstrap-containerapp-job.bash diff --git a/.github/workflows/osm-sync.yaml b/.github/workflows/osm-sync.yaml new file mode 100644 index 0000000..2e6d789 --- /dev/null +++ b/.github/workflows/osm-sync.yaml @@ -0,0 +1,117 @@ +name: osm-sync-job-cicd + +on: + push: + paths: + - osm-sync/** + - .github/workflows/osm-sync.yaml + - scripts/az-bootstrap-containerapp-job.bash + workflow_dispatch: + +permissions: + # required for federated credentials to access azure + id-token: write + # required for federated credentials to access azure + contents: read + # required to push to ghcr + packages: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Login to ghcr + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build + run: | + tags="-t ghcr.io/christianfosli/stellerom/osm-sync:${{ github.sha }}" + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + printf 'Banch is main! Tagging with latest\n' + tags="$tags -t ghcr.io/christianfosli/stellerom/osm-sync:latest" + fi + docker buildx build \ + --cache-from "type=gha,scope=osm-sync" \ + --cache-to "type=gha,mode=max,scope=osm-sync" \ + -f osm-sync/Dockerfile \ + $tags \ + . + env: + DOCKER_BUILDKIT: "1" + + - name: Push + run: | + docker push --all-tags ghcr.io/christianfosli/stellerom/osm-sync + + deploy_dev: + needs: build + runs-on: ubuntu-latest + environment: Development + steps: + - uses: actions/checkout@v4 + + - name: Azure login + uses: azure/login@v2 + with: + client-id: ${{ secrets.AZ_CLIENT_ID }} + tenant-id: ${{ secrets.AZ_TENANT_ID }} + subscription-id: ${{ secrets.AZ_SUBS_ID }} + + - name: Infra + run: ./scripts/az-bootstrap-containerapp-job.bash + env: + ENVIRONMENT: dev + SERVICE_NAME: osm-sync + CRON_EXPRESSION: '55 19 * * *' + + - name: Deploy + run: | + set -eo pipefail + + az containerapp job secret set -n caj-stellerom-osm-sync-dev -g rg-stellerom-dev \ + --secrets "db-connstr=$DB_CONNSTR" + + az containerapp job update -n caj-stellerom-osm-sync-dev -g rg-stellerom-dev \ + --image ghcr.io/christianfosli/stellerom/osm-sync:${{ github.sha }} \ + --set-env-vars "ROOM_API_DB_CONNSTR=secretref:db-connstr" "ROOM_API_DB_NAME=room-api-dev" + env: + DB_CONNSTR: "mongodb+srv://${{ secrets.ROOM_API_DB_USERNAME }}:${{ secrets.ROOM_API_DB_PASSWORD}}@azure-stellerom.au87e49.mongodb.net" + + deploy_prod: + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + needs: deploy_dev + runs-on: ubuntu-latest + environment: Production + steps: + - uses: actions/checkout@v4 + + - name: Azure login + uses: azure/login@v2 + with: + client-id: ${{ secrets.AZ_CLIENT_ID }} + tenant-id: ${{ secrets.AZ_TENANT_ID }} + subscription-id: ${{ secrets.AZ_SUBS_ID }} + + - name: Infra + run: ./scripts/az-bootstrap-containerapp-job.bash + env: + ENVIRONMENT: prod + SERVICE_NAME: osm-sync + CRON_EXPRESSION: '0 20 * * *' + + - name: Deploy + run: | + az containerapp job secret set -n caj-stellerom-osm-sync-prod -g rg-stellerom-prod \ + --secrets "db-connstr=$DB_CONNSTR" + + az containerapp job update -n caj-stellerom-osm-sync-prod -g rg-stellerom-prod \ + --image ghcr.io/christianfosli/stellerom/osm-sync:${{ github.sha }} \ + --set-env-vars "ROOM_API_DB_CONNSTR=secretref:db-connstr" "ROOM_API_DB_NAME=room-api-prod" + env: + DB_CONNSTR: "mongodb+srv://${{ secrets.ROOM_API_DB_USERNAME }}:${{ secrets.ROOM_API_DB_PASSWORD}}@azure-stellerom.au87e49.mongodb.net" diff --git a/app/islands/Map.tsx b/app/islands/Map.tsx index 6093d10..8148653 100644 --- a/app/islands/Map.tsx +++ b/app/islands/Map.tsx @@ -160,6 +160,10 @@ export default function MyMap(props: MapProps) {

Nytt stellerom

Klikk på "Fortsett" om du er fornøyd med plasseringen. +

+

+ Appen henter nå også data om stellerom fra OpenStreetMap. + Vurder å legge inn stellerom der først, med "changing_table=yes" så vil den dukke opp her automatisk ila ett døgn.