name: TinyLink API Workflow on: push: branches: [main] env: IMAGE_NAME: tinylnk-api FUNCTION_IMAGE_NAME: tinylnk-func permissions: id-token: write contents: read jobs: versionize: runs-on: ubuntu-latest outputs: semver: ${{ steps.gitversion.outputs.SemVer }} steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install GitVersion uses: gittools/actions/gitversion/setup@v0.9.15 with: versionSpec: "5.x" - name: Determine Version id: gitversion uses: gittools/actions/gitversion/execute@v0.9.15 with: useConfigFile: true build: needs: [versionize] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: "Push API to Azure Container Registry" uses: azure/docker-login@v1 with: login-server: ${{ secrets.ACR_LOGIN_SERVER }} username: ${{ secrets.ACR_USERNAME }} password: ${{ secrets.ACR_PASSWORD }} - name: Build & Push working-directory: src run: | docker build . --file Dockerfile --tag ${{ secrets.ACR_LOGIN_SERVER }}/$IMAGE_NAME:${{needs.versionize.outputs.semver}} docker build . --file Dockerfile --tag ${{ secrets.ACR_LOGIN_SERVER }}/$IMAGE_NAME:latest docker push ${{ secrets.ACR_LOGIN_SERVER }}/$IMAGE_NAME:${{needs.versionize.outputs.semver}} docker push ${{ secrets.ACR_LOGIN_SERVER }}/$IMAGE_NAME:latest build-function: needs: [versionize] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: "Push Functions to Azure Container Registry" uses: azure/docker-login@v1 with: login-server: ${{ secrets.ACR_LOGIN_SERVER }} username: ${{ secrets.ACR_USERNAME }} password: ${{ secrets.ACR_PASSWORD }} - name: Build & Push working-directory: src run: | docker build . --file TinyLink.Functions/Dockerfile --tag ${{ secrets.ACR_LOGIN_SERVER }}/$FUNCTION_IMAGE_NAME:${{needs.versionize.outputs.semver}} docker build . --file TinyLink.Functions/Dockerfile --tag ${{ secrets.ACR_LOGIN_SERVER }}/$FUNCTION_IMAGE_NAME:latest docker push ${{ secrets.ACR_LOGIN_SERVER }}/$FUNCTION_IMAGE_NAME:${{needs.versionize.outputs.semver}} docker push ${{ secrets.ACR_LOGIN_SERVER }}/$FUNCTION_IMAGE_NAME:latest publish-bicep: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build & Push working-directory: infrastructure run: | bicep build-params main.params.bicepparam az bicep build --file main.bicep - name: Publish Artifact uses: actions/upload-artifact@v3 with: name: bicep-templates path: infrastructure/*.json infrastructure-incremental: needs: [build, build-function, publish-bicep, versionize] runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Download Artifact uses: actions/download-artifact@v3 with: name: bicep-templates path: ./infrastructure - name: Az CLI login uses: azure/login@v1 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - name: Deploy Infrastructure id: arm uses: Azure/cli@v1 with: inlineScript: az deployment sub create --name tinylink-api-northeurope --location northeurope --template-file ./infrastructure/main.json --parameters ./infrastructure/main.params.json --parameters containerVersion=${{needs.versionize.outputs.semver}}