-
-
Notifications
You must be signed in to change notification settings - Fork 19
142 lines (114 loc) · 4.93 KB
/
build_and_publish.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
name: Build and publish
on:
pull_request:
merge_group:
branches:
- master
push:
branches:
- master
tags:
- v**
workflow_dispatch:
env:
APP_NAME: joinrpg-portal
MIGRATOR_NAME: joinrpg-dal-migrate
DOTNET_NOLOGO: true
DOTNET_CLI_TELEMETRY_OPTOUT: true
jobs:
build:
name: Build and publish
runs-on: ubuntu-20.04
permissions:
packages: write
checks: write
actions: write
statuses: write
steps:
- name: Checkout Repo
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch the whole repo history
# TODO: Make GitHub Action from this script
- name: Git Version # Fills env.CALCULATED_VERSION and env.CALCULATED_VERSION_IS_RELEASE
id: version
run: iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/AntonSmolkov/HandyPoshScripts/v1.0.2/DevOps/SemVerCalc_GitHubFlow_Actions.ps1'))
shell: pwsh
env:
REF_NAME: ${{ github.ref_name }}
REF_TYPE: ${{ github.ref_type }}
- name: Setup .NET
uses: actions/setup-dotnet@v4.1.0
with:
global-json-file: global.json
- name: Restore nuget dependencies cache
uses: actions/cache@v4
with:
path: ~/.nuget/packages
# Look to see if there is a cache hit for the corresponding requirements file
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget
#temporary disable docker cache
# - name: Restore docker images cache
# uses: satackey/action-docker-layer-caching@v0.0.11
# continue-on-error: true
- name: Restore
run: dotnet restore
- name: Format
run: dotnet format --no-restore --verify-no-changes --severity error
- name: Build
run: dotnet build -c Release --property:Version=${{ env.CALCULATED_VERSION }}
# run: dotnet build -c Release --no-restore
- name: Test
run: dotnet test -c Release --no-build --logger trx --results-directory ./TestResults
- name: Save test results to artifacts
uses: actions/upload-artifact@v4 # upload test results
if: success() || failure() # run this step even if previous step failed
with:
name: test-results
path: TestResults
#Rest of the pipeline implies write api privileges and can't be run on PRs
- name: Publish portal
if: github.event_name != 'pull_request' && github.event_name != 'merge_group'
run: dotnet publish -c Release --no-build ./src/JoinRpg.Portal/JoinRpg.Portal.csproj -p:Version=${{ env.CALCULATED_VERSION }}
- name: Publish migrator
if: github.event_name != 'pull_request' && github.event_name != 'merge_group'
run: dotnet publish -c Release --no-build ./src/Joinrpg.Dal.Migrate/Joinrpg.Dal.Migrate.csproj -p:Version=${{ env.CALCULATED_VERSION }}
- name: Build portal image
if: github.event_name != 'pull_request' && github.event_name != 'merge_group'
run: docker build ./src/JoinRpg.Portal --tag ${APP_NAME} --label "runnumber=${GITHUB_RUN_ID}"
- name: Build migrator image
if: github.event_name != 'pull_request' && github.event_name != 'merge_group'
run: docker build ./src/Joinrpg.Dal.Migrate --tag ${MIGRATOR_NAME} --label "runnumber=${GITHUB_RUN_ID}"
- name: Log in to docker registry
if: github.event_name != 'pull_request' && github.event_name != 'merge_group'
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u $ --password-stdin
- name: Push portal image to docker registry
if: github.event_name != 'pull_request' && github.event_name != 'merge_group'
run: |
APP_IMAGE_ID=ghcr.io/${{ github.repository_owner }}/${APP_NAME}
# Change all uppercase to lowercase
APP_IMAGE_ID=$(echo ${APP_IMAGE_ID} | tr '[A-Z]' '[a-z]')
VERSION=$(echo ${{ env.CALCULATED_VERSION }} | tr '[A-Z]' '[a-z]')
docker tag ${APP_NAME} ${APP_IMAGE_ID}:${VERSION}
docker push ${APP_IMAGE_ID}:${VERSION}
if [[ "${{ env.CALCULATED_VERSION_IS_RELEASE }}" == "True" ]]
then
docker tag ${APP_NAME} ${APP_IMAGE_ID}:latest
docker push ${APP_IMAGE_ID}:latest
fi
- name: Push migrator image to docker registry
if: github.event_name != 'pull_request' && github.event_name != 'merge_group'
run: |
MIGRATOR_IMAGE_ID=ghcr.io/${{ github.repository_owner }}/${MIGRATOR_NAME}
# Change all uppercase to lowercase
MIGRATOR_IMAGE_ID=$(echo ${MIGRATOR_IMAGE_ID} | tr '[A-Z]' '[a-z]')
VERSION=$(echo ${{ env.CALCULATED_VERSION }} | tr '[A-Z]' '[a-z]')
docker tag ${MIGRATOR_NAME} ${MIGRATOR_IMAGE_ID}:${VERSION}
docker push ${MIGRATOR_IMAGE_ID}:${VERSION}
if [[ "${{ env.CALCULATED_VERSION_IS_RELEASE }}" == "True" ]]
then
docker tag ${MIGRATOR_NAME} ${MIGRATOR_IMAGE_ID}:latest
docker push ${MIGRATOR_IMAGE_ID}:latest
fi