name: "Push to 'master' branch" on: push: branches: - "master" jobs: build: name: Build and test runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: 8.0.x - name: Restore dependencies run: dotnet restore - name: Build run: dotnet build --no-restore - name: Test run: dotnet test --no-build --verbosity normal publish: name: Publish runs-on: ubuntu-latest needs: build strategy: matrix: app: - WatchIt.WebAPI - WatchIt.Website steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup GitVersion uses: gittools/actions/gitversion/setup@v0.9.7 with: versionSpec: 5.x - name: Determine Version uses: gittools/actions/gitversion/execute@v0.9.7 id: gitversion with: useConfigFile: true configFilePath: .github/config/gitversion.yml - name: App Settings Variable Substitution uses: microsoft/variable-substitution@v1 if: ${{ matrix.app == 'WatchIt.WebAPI' }} with: files: ${{ github.workspace }}/${{ matrix.app }}/${{ matrix.app }}/appsettings.json env: ConnectionStrings.Default: ${{ secrets.CONNECTION_STRING }} RootUser.Email: ${{ secrets.ROOT_EMAIL }} RootUser.Password: ${{ secrets.ROOT_PASSWORD }} Authentication.Key: ${{ secrets.KEY }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to GitHub Container Registry uses: docker/login-action@v1 with: registry: ghcr.io username: ${{github.actor}} password: ${{secrets.GITHUB_TOKEN}} - name: Convert name to lowercase id: name uses: ASzc/change-string-case-action@v1 with: string: ${{ matrix.app }} - name: Build image run: docker build ${{ github.workspace }} -t ghcr.io/${{github.actor}}/${{ steps.name.outputs.lowercase }}:latest -t ghcr.io/${{github.actor}}/${{ steps.name.outputs.lowercase }}:${{steps.gitversion.outputs.SemVer}} -f ${{ github.workspace }}/${{ matrix.app }}/${{ matrix.app }}/Dockerfile - name: Publish image run: docker push ghcr.io/${{github.actor}}/${{ steps.name.outputs.lowercase }} --all-tags outputs: version: ${{ steps.gitversion.outputs.SemVer }} release: name: Release runs-on: ubuntu-latest needs: publish steps: - name: Create Release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{needs.publish.outputs.version}} release_name: ${{needs.publish.outputs.version}} draft: false prerelease: false deploy: name: Deploy runs-on: watchit needs: publish steps: - name: Login to GitHub Container Registry uses: docker/login-action@v1 with: registry: ghcr.io username: ${{github.actor}} password: ${{secrets.GITHUB_TOKEN}} - name: Stop old WatchIt.WebAPI container continue-on-error: true run: docker container stop watchit.webapi - name: Remove old WatchIt.WebAPI container continue-on-error: true run: docker container rm watchit.webapi - name: Remove old WatchIt.WebAPI image continue-on-error: true run: docker image rm ghcr.io/mateuszskoczek/watchit.webapi - name: Stop old WatchIt.Website container continue-on-error: true run: docker container stop watchit.website - name: Remove old WatchIt.Website container continue-on-error: true run: docker container rm watchit.website - name: Remove old WatchIt.Website image continue-on-error: true run: docker image rm ghcr.io/mateuszskoczek/watchit.website - name: Pull new WatchIt.WebAPI image run: docker pull ghcr.io/mateuszskoczek/watchit.webapi:latest - name: Pull new WatchIt.Website image run: docker pull ghcr.io/mateuszskoczek/watchit.website:latest - name: Run new WatchIt.WebAPI container run: docker run -p 8080:8080 -p 8081:8081 -d --name watchit.webapi ghcr.io/mateuszskoczek/watchit.webapi:latest - name: Wait for initialization run: sleep 10