Build and Deploy #306
This file contains hidden or 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: Build and Deploy | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - dev | |
| - stg | |
| workflow_dispatch: | |
| inputs: | |
| force: | |
| description: 'Force exec' | |
| type: boolean | |
| required: true | |
| jobs: | |
| Detect: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| app: ${{ steps.detect.outputs.app }} | |
| app-authentication: ${{ steps.detect.outputs.app-authentication }} | |
| app-authorization: ${{ steps.detect.outputs.app-authorization }} | |
| app-gateway: ${{ steps.detect.outputs.app-gateway }} | |
| app-abstractions: ${{ steps.detect.outputs.app-abstractions }} | |
| app-extensions: ${{ steps.detect.outputs.app-extensions }} | |
| app-protos: ${{ steps.detect.outputs.app-protos }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Detect Change | |
| id: detect | |
| run: | | |
| APP="Netcorext.Auth.API" | |
| APP_AUTHENTICATION="Netcorext.Auth.Authentication" | |
| APP_AUTHORIZATION="Netcorext.Auth.Authorization" | |
| APP_GATEWAY="Netcorext.Auth.Gateway" | |
| APP_CORE="Netcorext.Auth.Core" | |
| APP_ABSTRACTIONS="Netcorext.Auth.Abstractions" | |
| APP_EXTENSIONS="Netcorext.Auth.Extensions.AspNetCore" | |
| APP_PROTOS="Netcorext.Auth.Protobufs" | |
| CHANGE_FILES=`git diff --no-commit-id --name-only HEAD^` | |
| CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP}|${APP_CORE}" || true` | |
| if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then | |
| echo "No changes in ${APP}" | |
| APP="" | |
| fi | |
| CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_AUTHENTICATION}|${APP_CORE}" || true` | |
| if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then | |
| echo "No changes in ${APP_AUTHENTICATION}" | |
| APP_AUTHENTICATION="" | |
| fi | |
| CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_AUTHORIZATION}|${APP_CORE}" || true` | |
| if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then | |
| echo "No changes in ${APP_AUTHORIZATION}" | |
| APP_AUTHORIZATION="" | |
| fi | |
| CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_GATEWAY}|${APP_CORE}" || true` | |
| if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then | |
| echo "No changes in ${APP_GATEWAY}" | |
| APP_GATEWAY="" | |
| fi | |
| CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_ABSTRACTIONS}" || true` | |
| if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then | |
| echo "No changes in ${APP_ABSTRACTIONS}" | |
| APP_ABSTRACTIONS="" | |
| fi | |
| CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_EXTENSIONS}" || true` | |
| if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then | |
| echo "No changes in ${APP_EXTENSIONS}" | |
| APP_EXTENSIONS="" | |
| fi | |
| CHANGED=`echo "$CHANGE_FILES" | grep -Em 1 "${APP_PROTOS}" || true` | |
| if [ -z "$CHANGED" ] && [ "${{ inputs.force }}" != true ]; then | |
| echo "No changes in ${APP_PROTOS}" | |
| APP_PROTOS="" | |
| fi | |
| echo "app=${APP}" >> $GITHUB_OUTPUT | |
| echo "app-authentication=${APP_AUTHENTICATION}" >> $GITHUB_OUTPUT | |
| echo "app-authorization=${APP_AUTHORIZATION}" >> $GITHUB_OUTPUT | |
| echo "app-gateway=${APP_GATEWAY}" >> $GITHUB_OUTPUT | |
| echo "app-abstractions=${APP_ABSTRACTIONS}" >> $GITHUB_OUTPUT | |
| echo "app-extensions=${APP_EXTENSIONS}" >> $GITHUB_OUTPUT | |
| echo "app-protos=${APP_PROTOS}" >> $GITHUB_OUTPUT | |
| Build: | |
| name: "Build Netcorext.Auth.API" | |
| needs: Detect | |
| if: needs.Detect.outputs.app != '' | |
| runs-on: ubuntu-latest | |
| env: | |
| app: ${{ needs.Detect.outputs.app }} | |
| outputs: | |
| app: ${{ steps.envs.outputs.app }} | |
| branch: ${{ steps.envs.outputs.branch }} | |
| image: ${{ steps.envs.outputs.image }} | |
| tag: ${{ steps.envs.outputs.tag }} | |
| tag-hash: ${{ steps.envs.outputs.tag-hash }} | |
| tag-latest: ${{ steps.envs.outputs.tag-latest }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - id: envs | |
| uses: netcorext/dotnet-version-action@dev | |
| with: | |
| app: ${{ env.app }} | |
| image-prefix: ${{ vars.IMAGE_PREFIX }} | |
| - uses: netcorext/dotnet-dockerfile-action@dev | |
| with: | |
| expand-command: apt-get update && apt-get install -y curl | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Build Image & Push | |
| uses: netcorext/buildx-image-action@dev | |
| with: | |
| image: ${{ steps.envs.outputs.image-fullName }} | |
| tag: ${{ steps.envs.outputs.tag }} | |
| tag-hash: ${{ steps.envs.outputs.tag-hash }} | |
| tag-latest: ${{ steps.envs.outputs.tag-latest }} | |
| build-arg: |- | |
| --build-arg APP="${{ steps.envs.outputs.app }}" \ | |
| --build-arg ADDITIONAL_ARGUMENTS="${{ steps.envs.outputs.build-options }}" | |
| Build-Authentication: | |
| name: "Build Netcorext.Auth.Authentication" | |
| needs: Detect | |
| if: needs.Detect.outputs.app-authentication != '' | |
| runs-on: ubuntu-latest | |
| env: | |
| app: ${{ needs.Detect.outputs.app-authentication }} | |
| outputs: | |
| app: ${{ steps.envs.outputs.app }} | |
| branch: ${{ steps.envs.outputs.branch }} | |
| image: ${{ steps.envs.outputs.image }} | |
| tag: ${{ steps.envs.outputs.tag }} | |
| tag-hash: ${{ steps.envs.outputs.tag-hash }} | |
| tag-latest: ${{ steps.envs.outputs.tag-latest }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - id: envs | |
| uses: netcorext/dotnet-version-action@dev | |
| with: | |
| app: ${{ env.app }} | |
| image-prefix: ${{ vars.IMAGE_PREFIX }} | |
| - uses: netcorext/dotnet-dockerfile-action@dev | |
| with: | |
| expand-command: apt-get update && apt-get install -y curl | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Build Image & Push | |
| uses: netcorext/buildx-image-action@dev | |
| with: | |
| image: ${{ steps.envs.outputs.image-fullName }} | |
| tag: ${{ steps.envs.outputs.tag }} | |
| tag-hash: ${{ steps.envs.outputs.tag-hash }} | |
| tag-latest: ${{ steps.envs.outputs.tag-latest }} | |
| build-arg: |- | |
| --build-arg APP="${{ steps.envs.outputs.app }}" \ | |
| --build-arg ADDITIONAL_ARGUMENTS="${{ steps.envs.outputs.build-options }}" | |
| Build-Authorization: | |
| name: "Build Netcorext.Auth.Authorization" | |
| needs: Detect | |
| if: needs.Detect.outputs.app-authorization != '' | |
| runs-on: ubuntu-latest | |
| env: | |
| app: ${{ needs.Detect.outputs.app-authorization }} | |
| outputs: | |
| app: ${{ steps.envs.outputs.app }} | |
| branch: ${{ steps.envs.outputs.branch }} | |
| image: ${{ steps.envs.outputs.image }} | |
| tag: ${{ steps.envs.outputs.tag }} | |
| tag-hash: ${{ steps.envs.outputs.tag-hash }} | |
| tag-latest: ${{ steps.envs.outputs.tag-latest }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - id: envs | |
| uses: netcorext/dotnet-version-action@dev | |
| with: | |
| app: ${{ env.app }} | |
| image-prefix: ${{ vars.IMAGE_PREFIX }} | |
| - uses: netcorext/dotnet-dockerfile-action@dev | |
| with: | |
| expand-command: apt-get update && apt-get install -y curl | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Build Image & Push | |
| uses: netcorext/buildx-image-action@dev | |
| with: | |
| image: ${{ steps.envs.outputs.image-fullName }} | |
| tag: ${{ steps.envs.outputs.tag }} | |
| tag-hash: ${{ steps.envs.outputs.tag-hash }} | |
| tag-latest: ${{ steps.envs.outputs.tag-latest }} | |
| build-arg: |- | |
| --build-arg APP="${{ steps.envs.outputs.app }}" \ | |
| --build-arg ADDITIONAL_ARGUMENTS="${{ steps.envs.outputs.build-options }}" | |
| Build-Gateway: | |
| name: "Build Netcorext.Auth.Gateway" | |
| needs: Detect | |
| if: needs.Detect.outputs.app-gateway != '' | |
| runs-on: ubuntu-latest | |
| env: | |
| app: ${{ needs.Detect.outputs.app-gateway }} | |
| outputs: | |
| app: ${{ steps.envs.outputs.app }} | |
| branch: ${{ steps.envs.outputs.branch }} | |
| image: ${{ steps.envs.outputs.image }} | |
| tag: ${{ steps.envs.outputs.tag }} | |
| tag-hash: ${{ steps.envs.outputs.tag-hash }} | |
| tag-latest: ${{ steps.envs.outputs.tag-latest }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - id: envs | |
| uses: netcorext/dotnet-version-action@dev | |
| with: | |
| app: ${{ env.app }} | |
| image-prefix: ${{ vars.IMAGE_PREFIX }} | |
| - uses: netcorext/dotnet-dockerfile-action@dev | |
| with: | |
| expand-command: apt-get update && apt-get install -y curl | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Build Image & Push | |
| uses: netcorext/buildx-image-action@dev | |
| with: | |
| image: ${{ steps.envs.outputs.image-fullName }} | |
| tag: ${{ steps.envs.outputs.tag }} | |
| tag-hash: ${{ steps.envs.outputs.tag-hash }} | |
| tag-latest: ${{ steps.envs.outputs.tag-latest }} | |
| build-arg: |- | |
| --build-arg APP="${{ steps.envs.outputs.app }}" \ | |
| --build-arg ADDITIONAL_ARGUMENTS="${{ steps.envs.outputs.build-options }}" | |
| Build-Abstractions: | |
| name: "Build Netcorext.Auth.Abstractions" | |
| needs: Detect | |
| if: needs.Detect.outputs.app-abstractions != '' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| artifact: ${{ steps.build.outputs.artifact }} | |
| steps: | |
| - id: build | |
| name: Build Package | |
| uses: netcorext/dotnet-build-package-action@dev | |
| with: | |
| app: ${{ needs.Detect.outputs.app-abstractions }} | |
| Deploy-Abstractions: | |
| name: "Deploy Netcorext.Auth.Abstractions" | |
| needs: Build-Abstractions | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: netcorext/push-nuget-package-action@dev | |
| name: Push Package | |
| with: | |
| artifact: ${{ needs.Build-Abstractions.outputs.artifact }} | |
| nuget-api-url: ${{ vars.NUGET_API_URL }} | |
| nuget-api-key: ${{ secrets.NUGET_API_KEY }} | |
| Build-Extensions: | |
| name: "Build Netcorext.Auth.Extensions.AspNetCore" | |
| needs: Detect | |
| if: needs.Detect.outputs.app-extensions != '' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| artifact: ${{ steps.build.outputs.artifact }} | |
| steps: | |
| - id: build | |
| name: Build Package | |
| uses: netcorext/dotnet-build-package-action@dev | |
| with: | |
| app: ${{ needs.Detect.outputs.app-extensions }} | |
| Deploy-Extensions: | |
| name: "Deploy Netcorext.Auth.Extensions.AspNetCore" | |
| needs: Build-Extensions | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: netcorext/push-nuget-package-action@dev | |
| name: Push Package | |
| with: | |
| artifact: ${{ needs.Build-Extensions.outputs.artifact }} | |
| nuget-api-url: ${{ vars.NUGET_API_URL }} | |
| nuget-api-key: ${{ secrets.NUGET_API_KEY }} | |
| Build-Protos: | |
| name: "Build Netcorext.Auth.Protobufs" | |
| needs: Detect | |
| if: needs.Detect.outputs.app-protos != '' | |
| runs-on: ubuntu-latest | |
| outputs: | |
| artifact: ${{ steps.build.outputs.artifact }} | |
| steps: | |
| - id: build | |
| name: Build Package | |
| uses: netcorext/dotnet-build-package-action@dev | |
| with: | |
| app: ${{ needs.Detect.outputs.app-protos }} | |
| Deploy-Protos: | |
| name: "Deploy Netcorext.Auth.Protobufs" | |
| needs: Build-Protos | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: netcorext/push-nuget-package-action@dev | |
| name: Push Package | |
| with: | |
| artifact: ${{ needs.Build-Protos.outputs.artifact }} | |
| nuget-api-url: ${{ vars.NUGET_API_URL }} | |
| nuget-api-key: ${{ secrets.NUGET_API_KEY }} |