-
-
Notifications
You must be signed in to change notification settings - Fork 3
135 lines (133 loc) · 5.79 KB
/
pipeline.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
name: libNOM.io
on:
pull_request:
branches: [ master ]
push:
branches: [ master ]
create:
jobs:
test:
name: Test
strategy:
matrix:
# November, 2026 / May, 2026
framwork: [{dotnet: 'net8.0', version: '8.0.x'}, {dotnet: 'net9.0', version: '9.0.x'}]
os: [windows-latest, macos-latest, ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ matrix.framwork.version }}
dotnet-quality: ga
- name: Checkout
uses: actions/checkout@v4
- name: Cache
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: ${{ runner.os }}-nuget-
# TODO: Disabled until pipeline runs properly and LFS bandwidth is reseted.
# - name: Large File Storage (Create)
# run: git lfs ls-files --long | cut -d ' ' -f1 | sort > .lfs-assets-id
# - name: Large File Storage (Cache)
# uses: actions/cache@v4
# with:
# path: .git/lfs/objects
# key: ${{ runner.os }}-lfs-${{ hashFiles('.lfs-assets-id') }}
# restore-keys: |
# ${{ runner.os }}-lfs-
# - name: Large File Storage (Pull)
# run: git lfs pull
- name: Secret Injector
run: Get-ChildItem ./libNOM.test/Properties/ -File | ForEach-Object { (Get-Content $_.FullName) -Replace "{{ secrets.TESTSUITE_PASSWORD }}","${{ secrets.TESTSUITE_PASSWORD }}" | Set-Content $_.FullName }
shell: pwsh
- name: Unit Test
run: dotnet test libNOM.test --configuration Debug --framework ${{ matrix.framwork.dotnet }}
build:
name: Build
strategy:
matrix:
framwork: [{dotnet: 'net9.0', version: '9.0.x'}] # must match project file
os: [{display: 'windows', name: 'windows', runtime: 'win-x64'}, {display: 'macos', name: 'macos', runtime: 'osx-x64'}, {display: 'linux', name: 'ubuntu', runtime: 'linux-x64'}]
runs-on: ${{ matrix.os.name }}-latest
steps:
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ matrix.framwork.version }}
dotnet-quality: ga
- name: Checkout
uses: actions/checkout@v4
- name: Cache
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: ${{ runner.os }}-nuget-
- name: Secret Injector
run: Get-ChildItem ./libNOM.io/Properties/ -File | ForEach-Object { (Get-Content $_.FullName) -Replace "{{ secrets.STEAM_API_KEY }}","${{ secrets.STEAM_API_KEY }}" | Set-Content $_.FullName }
shell: pwsh
- name: Pack
if: ${{ matrix.os.name == 'macos' }} # only once
run: dotnet pack libNOM.io --configuration Release
- name: Publish
run: dotnet publish libNOM.cli --configuration Release --framework ${{ matrix.framwork.dotnet }} --runtime ${{ matrix.os.runtime }}
- name: Publish (Apple Silicon)
if: ${{ matrix.os.name == 'macos' }} # do this to have both native
run: dotnet publish libNOM.cli --configuration Release --framework ${{ matrix.framwork.dotnet }} --runtime osx-arm64
- name: Upload (NuGet)
if: ${{ matrix.os.name == 'macos' }} # only once
uses: actions/upload-artifact@v4
with:
name: NuGet
path: ./libNOM.io/bin/Release/libNOM.io.*nupkg
if-no-files-found: error
- name: Upload (Build)
uses: actions/upload-artifact@v4
with:
name: Build (${{ matrix.os.display }})
path: | # files not found are ignored
./libNOM.cli/bin/Release/${{ matrix.framwork.dotnet }}/${{ matrix.os.runtime }}/publish/libNOM.io.cli
./libNOM.cli/bin/Release/${{ matrix.framwork.dotnet }}/${{ matrix.os.runtime }}/publish/libNOM.io.cli.exe
./libNOM.cli/bin/Release/${{ matrix.framwork.dotnet }}/osx-arm64/publish/libNOM.io.cli
if-no-files-found: error
- name: Upload (Release)
if: ${{ matrix.os.name == 'macos' && startsWith(github.ref, 'refs/tags/') }} # only once and if tagged
uses: actions/upload-artifact@v4
with:
name: Release
path: ./.github/changelogs/${{ github.ref_name }}.md
if-no-files-found: error
release:
name: Release
if: ${{ startsWith(github.ref, 'refs/tags/') }} # only if tagged
runs-on: ubuntu-latest
needs: [test, build]
steps:
- name: Download
uses: actions/download-artifact@v4
- name: Version
run: echo "nupkg_version=$((((Get-Item -Path ./NuGet/libNOM.io.*.nupkg).Name -split '\.',3)[2] -split '\.',-2)[0])" >> $env:GITHUB_ENV
shell: pwsh
- name: Mismatch
if: ${{ github.ref_name != env.nupkg_version }}
run: |
echo "There is a version mismatch between git tag (${{ github.ref_name }}) and nupkg version (${{ env.nupkg_version }})!"
exit 1
- name: Rename
run: |
mv "./Build (windows)/win-x64/publish/libNOM.io.cli.exe" ./libNOM.io.cli.win-x64.exe
mv "./Build (macos)/osx-arm64/publish/libNOM.io.cli" ./libNOM.io.cli.macos-arm64
mv "./Build (macos)/osx-x64/publish/libNOM.io.cli" ./libNOM.io.cli.macos-x64
mv "./Build (linux)/linux-x64/publish/libNOM.io.cli" ./libNOM.io.cli.linux-x64
- name: Create
uses: softprops/action-gh-release@v2
with:
body_path: ./Release/${{ github.ref_name }}.md
files: |
./NuGet/libNOM.io.*nupkg
./libNOM.io.cli*
- name: Publish
run: dotnet nuget push ./NuGet/libNOM.io.*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }}