forked from TanninOne/usvfs
-
Notifications
You must be signed in to change notification settings - Fork 26
183 lines (166 loc) · 5.74 KB
/
build.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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
name: Build USVFS
on:
push:
branches: [master, dev/cmake]
tags:
- "*"
pull_request:
types: [opened, synchronize, reopened]
env:
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
jobs:
build:
name: Build USVFS
strategy:
matrix:
arch: [x86, x64]
config: [Debug, Release]
runs-on: windows-2022
steps:
# https://learn.microsoft.com/en-us/vcpkg/consume/binary-caching-github-actions-cache
- name: Export GitHub Actions cache environment variables
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
# checkout USVFS and vcpkg
- uses: actions/checkout@v4
- uses: lukka/run-vcpkg@v11
with:
vcpkgGitCommitId: f61a294e765b257926ae9e9d85f96468a0af74e7
vcpkgJsonGlob: ${{ github.workspace }}/usvfs/vcpkg.json
# configure
- run: cmake --preset vs2022-windows-${{ matrix.arch }} -B build_${{ matrix.arch }} "-DCMAKE_INSTALL_PREFIX=install/${{ matrix.config }}"
env:
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
# build
- run: cmake --build build_${{ matrix.arch }} --config ${{ matrix.config }} --target INSTALL
env:
VCPKG_ROOT: ${{ github.workspace }}/vcpkg
# package install
- uses: actions/upload-artifact@master
with:
name: usvfs_${{ matrix.config }}_${{ matrix.arch }}
path: ./install/${{ matrix.config }}
# package test/dlls/etc. for tests
- uses: actions/upload-artifact@master
with:
name: usvfs-libs_${{ matrix.config }}_${{ matrix.arch }}
path: ./lib
- uses: actions/upload-artifact@master
with:
name: usvfs-bins_${{ matrix.config }}_${{ matrix.arch }}
path: ./bin
- uses: actions/upload-artifact@master
with:
name: usvfs-tests_${{ matrix.config }}_${{ matrix.arch }}
path: ./test/bin
# merge x86 / x64 artifacts for tests (root bin/lib and test folder)
merge-artifacts-for-tests:
runs-on: ubuntu-latest
name: Merge Test Artifacts
needs: build
strategy:
matrix:
config: [Debug, Release]
steps:
- name: Merge USVFS libs
uses: actions/upload-artifact/merge@v4
with:
name: usvfs-libs_${{ matrix.config }}
pattern: usvfs-libs_${{ matrix.config }}_*
- name: Merge USVFS bins
uses: actions/upload-artifact/merge@v4
with:
name: usvfs-bins_${{ matrix.config }}
pattern: usvfs-bins_${{ matrix.config }}_*
- name: Merge USVFS tests
uses: actions/upload-artifact/merge@v4
with:
name: usvfs-tests_${{ matrix.config }}
pattern: usvfs-tests_${{ matrix.config }}_*
# merge x86 / x64 artifacts (install folder)
merge-artifacts-for-release:
runs-on: ubuntu-latest
name: Merge Install Artifacts
needs: build
strategy:
matrix:
config: [Debug, Release]
steps:
- name: Merge USVFS install
uses: actions/upload-artifact/merge@v4
with:
name: usvfs_${{ matrix.config }}
pattern: usvfs_${{ matrix.config }}_*
test:
name: Test USVFS
needs: merge-artifacts-for-tests
runs-on: windows-2022
strategy:
matrix:
config: [Debug, Release]
arch: [x86, x64]
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@master
with:
name: usvfs-libs_${{ matrix.config }}
path: ./lib
- uses: actions/download-artifact@master
with:
name: usvfs-bins_${{ matrix.config }}
path: ./bin
- uses: actions/download-artifact@master
with:
name: usvfs-tests_${{ matrix.config }}
path: ./test/bin
- run: ./test/bin/shared_test_${{ matrix.arch }}.exe
if: always()
- run: ./test/bin/testinject_bin_${{ matrix.arch }}.exe
if: always()
- run: ./test/bin/thooklib_test_${{ matrix.arch }}.exe
if: always()
- run: ./test/bin/tinjectlib_test_${{ matrix.arch }}.exe
if: always()
- run: ./test/bin/tvfs_test_${{ matrix.arch }}.exe
if: always()
- run: ./test/bin/usvfs_test_runner_${{ matrix.arch }}.exe
if: always()
- run: ./test/bin/usvfs_global_test_runner_${{ matrix.arch }}.exe
if: always()
- uses: actions/upload-artifact@master
if: always()
with:
name: tests-outputs_${{ matrix.config }}_${{ matrix.arch }}
path: ./test/temp
if-no-files-found: ignore
retention-days: 7
overwrite: true
publish:
if: github.ref_type == 'tag'
needs: [merge-artifacts-for-release, test]
runs-on: windows-2022
permissions:
contents: write
steps:
# USVFS does not use different names for debug and release so we are going to
# retrieve both install artifacts and put them under install/ and install/debug/
- name: Download Release Artifact
uses: actions/download-artifact@master
with:
name: usvfs_Release
path: ./install
- name: Download Debug Artifact
uses: actions/download-artifact@master
with:
name: usvfs_Debug
path: ./install/debug
- name: Create USVFS Base archive
run: 7z a usvfs_${{ github.ref_name }}.7z ./install/*
- name: Publish Release
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
run: gh release create --draft=false --notes="Release ${{ github.ref_name }}" "${{ github.ref_name }}" ./usvfs_${{ github.ref_name }}.7z