aboutsummaryrefslogtreecommitdiff
path: root/libs/usvfs/.github/workflows/build.yml
blob: 2acd535702e8aa487adf1492cdb3e89745a79d30 (plain)
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
name: Build USVFS

on:
  push:
    branches: [master, dev/cmake]
    tags:
      - "*"
  pull_request:
    types: [opened, synchronize, reopened]

env:
  VCPKG_BINARY_SOURCES: clear;x-azblob,${{ vars.AZ_BLOB_VCPKG_URL }},${{ secrets.AZ_BLOB_SAS }},readwrite

jobs:
  build:
    name: Build USVFS
    strategy:
      matrix:
        arch: [x86, x64]
        config: [Debug, Release]
    runs-on: windows-2022
    steps:
      # set VCPKG Root
      - name: "Set environmental variables"
        shell: bash
        run: |
          echo "VCPKG_ROOT=$VCPKG_INSTALLATION_ROOT" >> $GITHUB_ENV

      # checkout USVFS and vcpkg
      - uses: actions/checkout@v4

      # configure
      - run: cmake --preset vs2022-windows-${{ matrix.arch }} -B build_${{ matrix.arch }} "-DCMAKE_INSTALL_PREFIX=install/${{ matrix.config }}"

      # build
      - run: cmake --build build_${{ matrix.arch }} --config ${{ matrix.config }} --target INSTALL

      # 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@v4
        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