name: Build and Push Docker Images on: push: branches: - dev - auth-api - employee-api - transit-api - error-log-api - admin-ui - monitoring-ui pull_request: branches: - dev env: REGISTRY: gitea.testinstance.nl IMAGE_NAMESPACE: sven/the-transit-project jobs: detect-changes: runs-on: ubuntu-latest outputs: auth_api: ${{ steps.filter.outputs.auth_api }} employee_api: ${{ steps.filter.outputs.employee_api }} transit_api: ${{ steps.filter.outputs.transit_api }} error_log_api: ${{ steps.filter.outputs.error_log_api }} admin_ui: ${{ steps.filter.outputs.admin_ui }} monitoring_ui: ${{ steps.filter.outputs.monitoring_ui }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Detect changed paths id: filter uses: dorny/paths-filter@v3 with: filters: | auth_api: - 'auth_api/**' - 'docker-compose.yml' - '.gitea/workflows/docker-build.yml' employee_api: - 'employee_api/**' - 'docker-compose.yml' - '.gitea/workflows/docker-build.yml' transit_api: - 'transit_api/**' - 'docker-compose.yml' - '.gitea/workflows/docker-build.yml' error_log_api: - 'error_log_api/**' - 'docker-compose.yml' - '.gitea/workflows/docker-build.yml' admin_ui: - 'admin_ui/**' - 'docker-compose.yml' - '.gitea/workflows/docker-build.yml' monitoring_ui: - 'monitoring_ui/**' - 'docker-compose.yml' - '.gitea/workflows/docker-build.yml' build-auth-api: needs: detect-changes if: ${{ (gitea.ref_name == 'auth-api' || gitea.ref_name == 'dev') && needs.detect-changes.outputs.auth_api == 'true' }} runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Set image tags id: tags shell: bash run: | image_base="${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/auth_api" echo "tags<> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.ref_name }}" >> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.sha }}" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - name: Build and push auth_api uses: docker/build-push-action@v6 with: context: ./auth_api push: ${{ gitea.event_name == 'push' }} tags: ${{ steps.tags.outputs.tags }} build-employee-api: needs: detect-changes if: ${{ (gitea.ref_name == 'employee-api' || gitea.ref_name == 'dev') && needs.detect-changes.outputs.employee_api == 'true' }} runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Set image tags id: tags shell: bash run: | image_base="${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/employee_api" echo "tags<> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.ref_name }}" >> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.sha }}" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - name: Build and push employee_api uses: docker/build-push-action@v6 with: context: ./employee_api push: ${{ gitea.event_name == 'push' }} tags: ${{ steps.tags.outputs.tags }} build-transit-api: needs: detect-changes if: ${{ (gitea.ref_name == 'transit-api' || gitea.ref_name == 'dev') && needs.detect-changes.outputs.transit_api == 'true' }} runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Set image tags id: tags shell: bash run: | image_base="${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/transit_api" echo "tags<> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.ref_name }}" >> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.sha }}" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - name: Build and push transit_api uses: docker/build-push-action@v6 with: context: ./transit_api push: ${{ gitea.event_name == 'push' }} tags: ${{ steps.tags.outputs.tags }} build-error-log-api: needs: detect-changes if: ${{ (gitea.ref_name == 'error-log-api' || gitea.ref_name == 'dev') && needs.detect-changes.outputs.error_log_api == 'true' }} runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Set image tags id: tags shell: bash run: | image_base="${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/error_log_api" echo "tags<> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.ref_name }}" >> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.sha }}" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - name: Build and push error_log_api uses: docker/build-push-action@v6 with: context: ./error_log_api push: ${{ gitea.event_name == 'push' }} tags: ${{ steps.tags.outputs.tags }} build-admin-ui: needs: detect-changes if: ${{ (gitea.ref_name == 'admin-ui' || gitea.ref_name == 'dev') && needs.detect-changes.outputs.admin_ui == 'true' }} runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Set image tags id: tags shell: bash run: | image_base="${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/admin_ui" echo "tags<> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.ref_name }}" >> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.sha }}" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - name: Build and push admin_ui uses: docker/build-push-action@v6 with: context: ./admin_ui push: ${{ gitea.event_name == 'push' }} tags: ${{ steps.tags.outputs.tags }} build-monitoring-ui: needs: detect-changes if: ${{ (gitea.ref_name == 'monitoring-ui' || gitea.ref_name == 'dev') && needs.detect-changes.outputs.monitoring_ui == 'true' }} runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Set image tags id: tags shell: bash run: | image_base="${{ env.REGISTRY }}/${{ env.IMAGE_NAMESPACE }}/monitoring_ui" echo "tags<> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.ref_name }}" >> "$GITHUB_OUTPUT" echo "${image_base}:${{ gitea.sha }}" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - name: Build and push monitoring_ui uses: docker/build-push-action@v6 with: context: ./monitoring_ui push: ${{ gitea.event_name == 'push' }} tags: ${{ steps.tags.outputs.tags }} deploy-test-node: needs: [ detect-changes, build-auth-api, build-employee-api, build-transit-api, build-error-log-api, build-admin-ui, build-monitoring-ui, ] if: ${{ gitea.event_name == 'push' && gitea.ref_name == 'dev' }} runs-on: ubuntu-latest steps: - name: Redeploy Portainer stack shell: bash run: curl --fail --silent --show-error --retry 3 --max-time 30 -X POST "$PORTAINER_WEBHOOK_URL" env: PORTAINER_WEBHOOK_URL: ${{ secrets.PORTAINER_WEBHOOK_URL }}