-
Notifications
You must be signed in to change notification settings - Fork 39
132 lines (119 loc) · 5.4 KB
/
build-release.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
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: MSBuild
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
workflow_dispatch:
env:
# Path to the solution file relative to the root of the project.
SOLUTION_FILE_PATH: .
# Configuration type to build.
# You can convert this to a build matrix if you need coverage of multiple configuration types.
# https://docs.github.com/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
BUILD_CONFIGURATION: ReleaseWithSpoofer
# Indicates the location of the vcpkg as a Git submodule of the project repository.
# Not using "VCPKG_ROOT" because a variable with the same name is defined in the VS's
# Developer Command Prompt environment in VS 2022 17.6, which would override this one
# if it had the same name.
_VCPKG_: ${{ github.workspace }}/vcpkg
# Tells vcpkg where binary packages are stored.
VCPKG_DEFAULT_BINARY_CACHE: ${{ github.workspace }}/vcpkg/bincache
# Let's use GitHub Action cache as storage for the vcpkg Binary Caching feature.
VCPKG_BINARY_SOURCES: 'clear'
VCPKG_DEFAULT_TRIPLET: 'x64-windows-static'
permissions: write-all
jobs:
build:
runs-on: windows-2022
steps:
- name: Add MSBuild to PATH
uses: microsoft/[email protected]
# Set env vars needed for vcpkg to leverage the GitHub Action cache as a storage
# for Binary Caching.
- 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 || '');
- uses: actions/checkout@v4
with:
submodules: true
- name: "Create directory '${{ env.VCPKG_DEFAULT_BINARY_CACHE }}'"
shell: cmd
run: mkdir -p $VCPKG_DEFAULT_BINARY_CACHE
- name: Run vcpkg
uses: lukka/run-vcpkg@v11
with:
runVcpkgInstall : true
vcpkgGitCommitId: '3426db05b996481ca31e95fff3734cf23e0f51bc'
vcpkgDirectory: '${{ github.workspace }}/vcpkg'
vcpkgJsonGlob: 'D:/a/SKLib/SKLib/vcpkg.json'
runVcpkgFormatString: '[`install`, `--recurse`, `--clean-after-build`, `--x-install-root`, `$[env.VCPKG_INSTALLED_DIR]`, `--feature-flags`, `manifests,versions`]'
# Restore vcpkg from the GitHub Action cache service. Note that packages are restored by vcpkg's binary caching
# when it is being run afterwards by CMake.
- name: Restore vcpkg
uses: actions/cache@v4
with:
# The first path is the location of vcpkg: it contains the vcpkg executable and data files, as long as the
# built package archives (aka binary cache) which are located by VCPKG_DEFAULT_BINARY_CACHE env var.
# The other paths starting with '!' are exclusions: they contain termporary files generated during the build of the installed packages.
path: |
${{ env._VCPKG_ }}
!${{ env._VCPKG_ }}/buildtrees
!${{ env._VCPKG_ }}/packages
!${{ env._VCPKG_ }}/downloads
!${{ env._VCPKG_ }}/installed
# The key is composed in a way that it gets properly invalidated whenever a different version of vcpkg is being used.
key: |
${{ hashFiles( '.git/modules/vcpkg/HEAD' )}}
- name: Compile Visual Studio project with MSBuild
shell: cmd
run: ${{ '"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" && vcpkg integrate install && msbuild /p:Configuration=ReleaseWithSpoofer' }}
working-directory: ${{env.SOLUTION_FILE_PATH}}
- uses: actions/upload-artifact@v4
with:
# Name of the artifact to upload.
# Optional. Default is 'artifact'
name: 'SKLib'
# A file, directory or wildcard pattern that describes what to upload
# Required.
path: '${{env.SOLUTION_FILE_PATH}}/x64/${{env.BUILD_CONFIGURATION}}'
# The desired behavior if no files are found using the provided path.
# Available Options:
# warn: Output a warning but do not fail the action
# error: Fail the action with an error message
# ignore: Do not output any warnings or errors, the action does not fail
# Optional. Default is 'warn'
if-no-files-found: 'error'
- name: Check commit message format
id: check_message
shell: bash
run: |
# Get the latest commit message
commit_message=$(git log -1 --pretty=%B)
# Regex pattern to match v*.*.*
if [[ "$commit_message" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Commit message matches the version format."
echo "matches=true" >> $GITHUB_ENV
else
echo "Commit message does NOT match the version format."
echo "matches=false" >> $GITHUB_ENV
fi
- name: Create ZIP Archive
run: |
zip -r SKLib.zip "${{env.SOLUTION_FILE_PATH}}/x64/${{env.BUILD_CONFIGURATION}}"
shell: bash
- name: Release
uses: softprops/action-gh-release@v2
if: env.matches == 'true'
with:
files: |
'${{env.SOLUTION_FILE_PATH}}/x64/${{env.BUILD_CONFIGURATION}}/*'
SKLib.zip
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ github.event.head_commit.message }}