2121 WEBVULKAN_CCACHE_VERSION : v1
2222 LLVM_RELEASE_TAG : llvm-wasm-prebuilt-latest
2323 PACKAGE_RELEASE_TAG : webvulkan-package-latest
24+ DXC_RELEASE_TAG : dxc-wasm-prebuilt-latest
25+ DXC_WASM_PREBUILT_URL : ${{ vars.WEBVULKAN_DXC_WASM_PREBUILT_URL || 'https://github.com/Devsh-Graphics-Programming/llvmpipe2wasm/releases/download/dxc-wasm-prebuilt-latest/dxc-wasm-prebuilt.zip' }}
26+ DXC_WASM_PREBUILT_SHA256 : ${{ vars.WEBVULKAN_DXC_WASM_PREBUILT_SHA256 || '' }}
2427
2528jobs :
2629 refresh_prebuilt :
5457 with :
5558 path : |
5659 .3rdparty
57- key : ${{ runner.os }}-webvulkan-refresh-3rdparty-${{ env.WEBVULKAN_REFRESH_CACHE_VERSION }}-${{ hashFiles('CMakeLists.txt', 'cmake/FetchWebVulkanSources.cmake', 'cmake/BuildMesaLlvmpipeWasm.cmake') }}
60+ key : ${{ runner.os }}-webvulkan-refresh-3rdparty-${{ env.WEBVULKAN_REFRESH_CACHE_VERSION }}-${{ hashFiles('CMakeLists.txt', 'cmake/FetchWebVulkanSources.cmake', 'cmake/BuildMesaLlvmpipeWasm.cmake') }}-${{ env.DXC_WASM_PREBUILT_SHA256 }}
5861 restore-keys : |
5962 ${{ runner.os }}-webvulkan-refresh-3rdparty-${{ env.WEBVULKAN_REFRESH_CACHE_VERSION }}-
6063
@@ -90,11 +93,32 @@ jobs:
9093 ccache --zero-stats
9194 ccache --show-stats
9295
96+ - name : Bootstrap DXC Wasm prebuilt
97+ shell : bash
98+ run : |
99+ set -euo pipefail
100+ dxc_dir="${GITHUB_WORKSPACE}/.3rdparty/dxc-wasm"
101+ dxc_js="${dxc_dir}/dxc.js"
102+ dxc_wasm="${dxc_dir}/dxc.wasm"
103+ if [ ! -f "${dxc_js}" ] || [ ! -f "${dxc_wasm}" ]; then
104+ mkdir -p "${dxc_dir}"
105+ curl -L --fail "${DXC_WASM_PREBUILT_URL}" -o "${RUNNER_TEMP}/dxc-wasm-prebuilt.zip"
106+ if [ -n "${DXC_WASM_PREBUILT_SHA256}" ]; then
107+ echo "${DXC_WASM_PREBUILT_SHA256} ${RUNNER_TEMP}/dxc-wasm-prebuilt.zip" | sha256sum -c -
108+ fi
109+ python3 -c "import sys,zipfile; zipfile.ZipFile(sys.argv[1]).extractall(sys.argv[2])" \
110+ "${RUNNER_TEMP}/dxc-wasm-prebuilt.zip" "${dxc_dir}"
111+ fi
112+ test -f "${dxc_js}"
113+ test -f "${dxc_wasm}"
114+ echo "WEBVULKAN_DXC_WASM_JS=${dxc_js}" >> "${GITHUB_ENV}"
115+
93116 - name : Configure latest source refresh build
94117 run : |
95118 cmake -S . -B build_refresh -G "${CMAKE_GENERATOR}" \
96119 -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" \
97120 -DWEBVULKAN_BUILD_TESTS=ON \
121+ -DWEBVULKAN_DXC_WASM_JS="${WEBVULKAN_DXC_WASM_JS}" \
98122 -DWEBVULKAN_ALLOW_DEP_UPDATES=ON \
99123 -DWASM_EMSDK_GIT_REF=main \
100124 -DWASM_EMSDK_VERSION=latest \
@@ -130,6 +154,7 @@ jobs:
130154 bundles = [
131155 ("llvm-wasm-install.zip", root / ".3rdparty" / "llvm-wasm-install"),
132156 ("webvulkan-package.zip", root / "package_refresh"),
157+ ("dxc-wasm-prebuilt.zip", root / ".3rdparty" / "dxc-wasm"),
133158 ]
134159
135160 for zip_name, src_dir in bundles:
@@ -158,6 +183,10 @@ jobs:
158183 --output-signature release_artifacts/webvulkan-package.zip.sig \
159184 --output-certificate release_artifacts/webvulkan-package.zip.pem \
160185 release_artifacts/webvulkan-package.zip
186+ cosign sign-blob --yes \
187+ --output-signature release_artifacts/dxc-wasm-prebuilt.zip.sig \
188+ --output-certificate release_artifacts/dxc-wasm-prebuilt.zip.pem \
189+ release_artifacts/dxc-wasm-prebuilt.zip
161190
162191 - name : Prepare release notes
163192 shell : bash
@@ -180,6 +209,14 @@ jobs:
180209 echo "- Workflow run: https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
181210 } >> release_notes/webvulkan-package-latest.md
182211
212+ cp .github/release-notes/dxc-wasm-prebuilt-latest.md release_notes/dxc-wasm-prebuilt-latest.md
213+ {
214+ echo
215+ echo "Build metadata:"
216+ echo "- Commit: \`${GITHUB_SHA}\`"
217+ echo "- Workflow run: https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
218+ } >> release_notes/dxc-wasm-prebuilt-latest.md
219+
183220 - name : Upload refresh artifacts
184221 uses : actions/upload-artifact@v4
185222 with :
@@ -227,6 +264,26 @@ jobs:
227264 --notes-file "${PKG_NOTES}"
228265 fi
229266
267+ - name : Publish DXC prebuilt release
268+ env :
269+ GH_TOKEN : ${{ github.token }}
270+ run : |
271+ DXC_ZIP="release_artifacts/dxc-wasm-prebuilt.zip"
272+ DXC_SHA="release_artifacts/dxc-wasm-prebuilt.zip.sha256"
273+ DXC_SIG="release_artifacts/dxc-wasm-prebuilt.zip.sig"
274+ DXC_PEM="release_artifacts/dxc-wasm-prebuilt.zip.pem"
275+ DXC_NOTES="release_notes/dxc-wasm-prebuilt-latest.md"
276+ if gh release view "${DXC_RELEASE_TAG}" >/dev/null 2>&1; then
277+ gh release upload "${DXC_RELEASE_TAG}" "${DXC_ZIP}" "${DXC_SHA}" "${DXC_SIG}" "${DXC_PEM}" --clobber
278+ gh release edit "${DXC_RELEASE_TAG}" \
279+ --title "DXC wasm prebuilt latest" \
280+ --notes-file "${DXC_NOTES}"
281+ else
282+ gh release create "${DXC_RELEASE_TAG}" "${DXC_ZIP}" "${DXC_SHA}" "${DXC_SIG}" "${DXC_PEM}" \
283+ --title "DXC wasm prebuilt latest" \
284+ --notes-file "${DXC_NOTES}"
285+ fi
286+
230287 - name : Update repository variables
231288 env :
232289 GH_TOKEN : ${{ github.token }}
@@ -237,6 +294,8 @@ jobs:
237294 LLVM_URL="https://github.com/${GITHUB_REPOSITORY}/releases/download/${LLVM_RELEASE_TAG}/llvm-wasm-install.zip"
238295 PKG_SHA="$(cut -d' ' -f1 release_artifacts/webvulkan-package.zip.sha256)"
239296 PKG_URL="https://github.com/${GITHUB_REPOSITORY}/releases/download/${PACKAGE_RELEASE_TAG}/webvulkan-package.zip"
297+ DXC_SHA="$(cut -d' ' -f1 release_artifacts/dxc-wasm-prebuilt.zip.sha256)"
298+ DXC_URL="https://github.com/${GITHUB_REPOSITORY}/releases/download/${DXC_RELEASE_TAG}/dxc-wasm-prebuilt.zip"
240299
241300 set +e
242301 gh variable set WEBVULKAN_LLVM_PREBUILT_URL --repo "${GITHUB_REPOSITORY}" --body "${LLVM_URL}"
@@ -247,9 +306,13 @@ jobs:
247306 STATUS_C=$?
248307 gh variable set WEBVULKAN_PACKAGE_SHA256 --repo "${GITHUB_REPOSITORY}" --body "${PKG_SHA}"
249308 STATUS_D=$?
309+ gh variable set WEBVULKAN_DXC_WASM_PREBUILT_URL --repo "${GITHUB_REPOSITORY}" --body "${DXC_URL}"
310+ STATUS_E=$?
311+ gh variable set WEBVULKAN_DXC_WASM_PREBUILT_SHA256 --repo "${GITHUB_REPOSITORY}" --body "${DXC_SHA}"
312+ STATUS_F=$?
250313 set -e
251314
252- if [ "${STATUS_A}" -ne 0 ] || [ "${STATUS_B}" -ne 0 ] || [ "${STATUS_C}" -ne 0 ] || [ "${STATUS_D}" -ne 0 ]; then
315+ if [ "${STATUS_A}" -ne 0 ] || [ "${STATUS_B}" -ne 0 ] || [ "${STATUS_C}" -ne 0 ] || [ "${STATUS_D}" -ne 0 ] || [ "${STATUS_E}" -ne 0 ] || [ "${STATUS_F}" -ne 0 ] ; then
253316 echo "::warning::Repository variable update was skipped due to permission policy. Releases were still updated."
254317 fi
255318
0 commit comments