Files
WatchIt/.github/workflows/master_push.yml

142 lines
5.0 KiB
YAML

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 for WatchIt.WebAPI
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: App Settings Variable Substitution for WatchIt.Website
uses: microsoft/variable-substitution@v1
if: ${{ matrix.app == 'WatchIt.Website' }}
with:
files: ${{ github.workspace }}/${{ matrix.app }}/${{ matrix.app }}/appsettings.json
env:
Endpoints.Base: ${{ secrets.API_URL }}
- 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 1080:8080 -v watchit.webapi:/app -d --name watchit.webapi ghcr.io/mateuszskoczek/watchit.webapi:latest
- name: Run new WatchIt.Website container
run: docker run -p 80:8080 -v watchit.website:/app -d --name watchit.website ghcr.io/mateuszskoczek/watchit.website:latest
- name: Wait for initialization
run: sleep 10
- name: Check WatchIt.WebAPI container health
run: docker ps | grep "watchit.webapi"
- name: Check WatchIt.Website container health
run: docker ps | grep "watchit.website"