name: Build and deploy Flutter Web on: push: branches: - main jobs: build: runs-on: builder env: SERVICE_NAME: flutter IMAGE_SHA: gitea.dsrptlab.com/mapflow/flutter:${{ github.sha }} IMAGE_LATEST: gitea.dsrptlab.com/mapflow/flutter:latest steps: - uses: actions/checkout@v4 - name: Build and push image run: | set -euo pipefail for attempt in 1 2 3; do if docker buildx build \ --push \ --provenance=false \ --tag "$IMAGE_SHA" \ --tag "$IMAGE_LATEST" \ --build-arg MAPBOX_ACCESS_TOKEN="${{ secrets.MAPBOX_ACCESS_TOKEN }}" \ --build-arg MAPBOX_STYLE="mapbox/streets-v12" \ --build-arg TELEGRAM_BOT_USERNAME="carfteebot" \ --build-arg BUILD_VERSION="${GITHUB_SHA}" \ .; then published_images="$(docker image ls --format '{{.Repository}}:{{.Tag}}' | awk -v sha="$IMAGE_SHA" -v latest="$IMAGE_LATEST" '$0 == sha || $0 == latest')" if [ -n "$published_images" ]; then docker image rm -f $published_images fi exit 0 fi sleep "$((attempt * 10))" done exit 1 - name: Skip stale deployment run: | set -euo pipefail latest_sha="$(git ls-remote origin refs/heads/main | awk '{print $1}')" if [ "$latest_sha" = "${GITHUB_SHA}" ]; then touch .deploy-current else echo "A newer main commit exists: $latest_sha. Skipping deploy for ${GITHUB_SHA}." fi - name: Trigger Dokploy deploy webhook run: | set -euo pipefail [ -f .deploy-current ] || exit 0 payload=$(cat <