Synthesize conformance for generic requirements. (#5111) #255
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
push: | |
# Also run on pushes to the main branch so that we can keep the llvm and sccache | |
# caches filled in a scope available to everyone | |
branches: | |
- master | |
paths-ignore: | |
- 'docs/**' | |
- 'LICENCE' | |
- 'CONTRIBUTION.md' | |
- 'README.md' | |
tags: | |
- 'v*' | |
jobs: | |
release: | |
strategy: | |
matrix: | |
os: [linux, macos, windows] | |
config: [release] | |
platform: [x86_64, aarch64] | |
test-category: [smoke] | |
include: | |
- {os: linux, runs-on: ubuntu-20.04, compiler: gcc} | |
- {os: windows, runs-on: windows-latest, compiler: cl} | |
- {os: macos, runs-on: macos-latest, compiler: clang} | |
- {build-slang-llvm: false} | |
- {os: linux, platform: x86_64, build-slang-llvm: true} | |
- {os: windows, platform: x86_64, build-slang-llvm: true} | |
- {os: macos, platform: aarch64, build-slang-llvm: true} | |
fail-fast: false | |
runs-on: ${{ matrix.runs-on }} | |
container: ${{ matrix.image || '' }} | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: 'recursive' | |
fetch-depth: '0' | |
- name: Setup | |
uses: ./.github/actions/common-setup | |
with: | |
os: ${{matrix.os}} | |
compiler: ${{matrix.compiler}} | |
platform: ${{matrix.platform}} | |
config: ${{matrix.config}} | |
build-llvm: ${{matrix.build-slang-llvm}} | |
- name: Build slang generators | |
run: | | |
cmake --workflow --preset generators --fresh | |
mkdir build-platform-generators | |
cmake --install build --config Release --component generators --prefix build-platform-generators | |
- name: Change dev tools to host arch (windows) | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: ${{matrix.platform == 'aarch64' && 'amd64_arm64' || 'amd64'}} | |
sdk: "10.0.19041.0" | |
- name: Change dev tools to host arch (linux and macos) | |
run: | | |
if [[ "${{matrix.os}}" == linux* && "${{matrix.platform}}" == "aarch64" && "$(uname -m)" != "aarch64" ]]; then | |
export CC=aarch64-linux-gnu-gcc | |
export CXX=aarch64-linux-gnu-g++ | |
fi | |
CMAKE_OSX_ARCHITECTURES="${{matrix.platform}}" | |
CMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES//aarch64/arm64} | |
echo "CC=$CC" >> "$GITHUB_ENV" | |
echo "CXX=$CXX" >> "$GITHUB_ENV" | |
echo "CMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES" >> "$GITHUB_ENV" | |
- name: Build Slang | |
run: | | |
if [[ "${{ matrix.os }}" == "windows" && "${{ matrix.config }}" != "release" ]]; then | |
echo "Please see ci.yml for the steps to make debug builds work on Windows" >&2 | |
exit 1 | |
fi | |
cmake --preset default --fresh \ | |
-DSLANG_GENERATORS_PATH=build-platform-generators/bin \ | |
-DSLANG_ENABLE_EXAMPLES=OFF \ | |
-DSLANG_EMBED_STDLIB=ON \ | |
"-DSLANG_SLANG_LLVM_FLAVOR=$( | |
[[ "${{matrix.build-slang-llvm}}" = "true" ]] && echo "USE_SYSTEM_LLVM" || echo "DISABLE")" | |
cmake --build --preset "${{matrix.config}}" | |
- name: Sign and notarize binaries | |
if: matrix.os == 'macos' && startsWith(github.ref, 'refs/tags/v') | |
id: notarize | |
env: | |
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} | |
P12_PASSWORD: ${{ secrets.P12_PASSWORD }} | |
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} | |
IDENTITY_ID: d6ada82a113e4204aaad914e1013e9548ffd30d0 | |
AC_PASSWORD: ${{secrets.APPLE_ID_PASSWORD}} | |
AC_PROVIDER: ${{secrets.APPLE_ID_PPOVIDER}} | |
AC_USERNAME: ${{secrets.APPLE_ID_USERNAME}} | |
run: | | |
brew install Bearer/tap/gon | |
security find-identity -v | |
brew install coreutils | |
# create variables | |
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 | |
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db | |
# import certificate and provisioning profile from secrets | |
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output "$CERTIFICATE_PATH" | |
# create temporary keychain | |
security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" | |
security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH" | |
security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" | |
# import certificate to keychain | |
security import "$CERTIFICATE_PATH" -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH" | |
security list-keychain -d user -s "$KEYCHAIN_PATH" | |
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "${KEYCHAIN_PASSWORD}" "$KEYCHAIN_PATH" | |
binaries=( | |
"${lib_dir}/libslang.dylib" | |
"${lib_dir}/libslang-rt.dylib" | |
"${lib_dir}/libslang-glslang.dylib" | |
"${lib_dir}/libslang-llvm.dylib" | |
"${lib_dir}/libgfx.dylib" | |
"${bin_dir}/slangd" | |
"${bin_dir}/slangc" | |
) | |
for b in "${binaries[@]}"; do | |
if [[ -f "$b" ]]; then | |
echo "Signing binary '$b'..." | |
/usr/bin/codesign --force --options runtime -s "${IDENTITY_ID}" "$b" -v | |
7z a "slang-macos-dist.zip" "$b" | |
fi | |
done | |
timeout 1000 gon ./extras/macos-notarize.json | |
cp slang-macos-dist.zip "slang-macos-dist-${{matrix.platform}}.zip" | |
echo "SLANG_NOTARIZED_DIST=slang-macos-dist-${{matrix.platform}}.zip" >> "$GITHUB_OUTPUT" | |
- name: Package Slang | |
id: package | |
run: | | |
# For the release, also generate a tar.gz file | |
cpack --preset "$config" -G ZIP | |
cpack --preset "$config" -G TGZ | |
triggering_ref=${{ github.ref_name }} | |
base=slang-${triggering_ref#v}-${{matrix.os}}-${{matrix.platform}} | |
mv "$(pwd)/build/dist-${config}/slang.zip" "${base}.zip" | |
echo "SLANG_BINARY_ARCHIVE_ZIP=${base}.zip" >> "$GITHUB_OUTPUT" | |
mv "$(pwd)/build/dist-${config}/slang.tar.gz" "${base}.tar.gz" | |
echo "SLANG_BINARY_ARCHIVE_TAR=${base}.tar.gz" >> "$GITHUB_OUTPUT" | |
# For some reason, the binaries packed by cpack for macos is modified | |
# by cpack and considered damanged by macos. For now we workaround this | |
# by repacking all the binaries into the release package. | |
if [[ "${{ matrix.os }}" == "macos" ]]; then | |
mkdir ./ttmp | |
unzip "${base}.zip" -d ./ttmp | |
/bin/cp -rf build/Release/bin/* ./ttmp/bin/ | |
/bin/cp -rf build/Release/lib/* ./ttmp/lib/ | |
rm ${base}.zip | |
rm ${base}.tar.gz | |
cd ./ttmp | |
7z a ../${base}.zip . | |
tar -czvf ../${base}.tar.gz . | |
cd ../ | |
fi | |
- name: File check | |
run: | | |
find "build/dist-$config" -print0 ! -iname '*.md' ! -iname '*.h' -type f | xargs -0 file | |
- name: UploadBinary | |
uses: softprops/action-gh-release@v1 | |
if: startsWith(github.ref, 'refs/tags/v') | |
with: | |
draft: contains(github.ref, 'draft') | |
prerelease: contains(github.ref, 'draft') | |
files: | | |
${{ steps.package.outputs.SLANG_BINARY_ARCHIVE_ZIP }} | |
${{ steps.package.outputs.SLANG_BINARY_ARCHIVE_TAR }} | |
${{ steps.notarize.outputs.SLANG_NOTARIZED_DIST }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |