Skip to content

PR used to investigate test failures on Ubuntu -- to be discarded #3394

PR used to investigate test failures on Ubuntu -- to be discarded

PR used to investigate test failures on Ubuntu -- to be discarded #3394

---
name: Build and test
# README:
#
# The semantics for running shell commands in GitHub actions is non-obvious. Please read
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell
# before modifying this file. Our strategy is to rely on the built-in (unspecified) shell, and
# explicitly set the shell settings we want (with `set -eo pipefail`) at the beginning of any
# bash script. For more information on these settings, see `man bash`.
#
# GitHub Actions files can be difficult to modify with confidence, because testing changes often
# requires pushing to a branch and running CI remotely. To make this process easier, consider
# the following:
#
# 1) Use Visual Studio Code with the GitHub Actions Extension (github.vscode-github-actions).
# This allows you to check the validity of your action schema and syntax without pushing to a
# branch.
# 2) Use https://github.com/nektos/act to run your CI steps locally. Note this will only work with
# steps run on Linux platforms, as `act` is implemented with Docker containers.
#
on:
push:
branches: [main]
paths-ignore:
- "Docs/**"
- "**.md"
- "README.md"
- "LICENSE"
- ".gitignore"
- ".editorconfig"
tags:
- v*
pull_request:
branches: ["**"]
paths-ignore:
- "Docs/**"
- "**.md"
- "README.md"
- "LICENSE"
- ".gitignore"
- ".editorconfig"
env:
spm-build-options: -Xswiftc -enable-testing --explicit-target-dependency-import-check error
spm-test-options: --parallel
swift-version: '5.10'
jobs:
determine-version:
name: "Determine compiler version from git tag"
runs-on: ubuntu-latest
outputs:
version: ${{ steps.get-tag.outputs.version }}
steps:
- id: get-tag
run: |
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
version="${GITHUB_REF#refs/tags/}"
else
version=""
fi
echo "version=$version" >> "$GITHUB_OUTPUT"
native:
needs: determine-version
name: "Native: ${{ matrix.os }}/${{ matrix.spm_configuration }}/${{ matrix.cmake_generator }}"
strategy:
fail-fast: false
matrix:
# macos-latest is apparently not the latest.
os: [ubuntu-latest]
spm_configuration: [debug, release]
cmake_generator: [Ninja]
include:
- HYLO_LLVM_BUILD_RELEASE: 20240303-215025
- HYLO_LLVM_BUILD_TYPE: MinSizeRel
- HYLO_LLVM_DOWNLOAD_URL: https://github.com/hylo-lang/llvm-build/releases/download
- HYLO_LLVM_VERSION: '17.0.6'
- llvm_package_suffix: .tar.zst
- unpackage_command: tar -x --zstd -f
# https://github.com/apple/swift/issues/72121
- windows_only: '# WINDOWS ONLY:'
- on_windows_and_spm_works: false
- use_spm: true
- os: ubuntu-latest
triple_suffix: unknown-linux-gnu
- spm_configuration: debug
cmake_build_type: Debug
- spm_configuration: release
cmake_build_type: Release
runs-on: ${{ matrix.os }}
env:
llvm_url_prefix: ${{ matrix.HYLO_LLVM_DOWNLOAD_URL }}/${{ matrix.HYLO_LLVM_BUILD_RELEASE }}
llvm_package_basename: llvm-${{ matrix.HYLO_LLVM_VERSION }}-x86_64-${{ matrix.triple_suffix }}-${{ matrix.HYLO_LLVM_BUILD_TYPE }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
show-progress: false
path: hylo
- name: Set compiler version
working-directory: hylo
run: ./Tools/set-hc-version.sh ${{ needs.determine-version.outputs.version }}
shell: bash
- name: Set up swift (non-Windows)
if: ${{ runner.os != 'Windows' }}
uses: SwiftyLab/setup-swift@latest
with:
swift-version: ${{ env.swift-version }}
cache-snapshot: false # Workaround for https://github.com/SwiftyLab/setup-swift/issues/315
- uses: compnerd/gha-setup-vsdevenv@main
- name: Set up swift (Windows)
if: ${{ runner.os == 'Windows' }}
uses: compnerd/gha-setup-swift@v0.2.2
with:
branch: swift-${{ env.swift-version }}-release
tag: ${{ env.swift-version }}-RELEASE
- name: Verify swift version
run: swift --version && swift --version | grep -q ${{ env.swift-version }}
shell: bash
- name: Set up latest CMake and Ninja
uses: lukka/get-cmake@latest
with:
cmakeVersion: latestrc
- name: Install LLVM
# 7z doesn't support decompressing from a stream or we'd do this all as one statement. Maybe
# we should find a way to use zstd on windows.
run: >-
curl --no-progress-meter -L -O
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}"
${{ env.llvm_url_prefix }}/${{ env.llvm_package_basename }}${{ matrix.llvm_package_suffix }}
${{ matrix.unpackage_command }} ${{ env.llvm_package_basename }}${{ matrix.llvm_package_suffix }}
- name: Configure (CMake)
# We explicitly point to swiftc in the PATH because otherwise CMake picks up the one in XCode.
run: >-
cmake -G '${{ matrix.cmake_generator }}' -S . -B .ninja-build
${{ matrix.cmake_generator != 'Xcode' && format('-DCMAKE_BUILD_TYPE={0}', matrix.cmake_build_type) || '' }}
-DBUILD_TESTING=YES
-DLLVM_DIR=${{ github.workspace }}/${{ env.llvm_package_basename }}/lib/cmake/llvm
${{ matrix.os == 'macos-13' && '-D CMAKE_Swift_COMPILER=swiftc' || '' }}
working-directory: hylo
- name: Build (CMake)
run: cmake --build hylo/.ninja-build ${{ matrix.cmake_generator == 'Xcode' && format('--config {0}', matrix.cmake_build_type) || '' }}
- name: Test (CMake)
run: ctest --parallel --output-on-failure --test-dir hylo/.ninja-build ${{ matrix.cmake_generator == 'Xcode' && format('-C {0}', matrix.cmake_build_type) || '' }}
- if: ${{ matrix.use_spm }}
name: Create LLVM pkgconfig file and make it findable
run: >-
set -ex -o pipefail
mkdir pkg-config
PATH="${{ github.workspace }}/${{ env.llvm_package_basename }}/bin:$PATH"
hylo/Tools/make-pkgconfig.sh pkg-config/llvm.pc
echo 'PKG_CONFIG_PATH=${{ github.workspace }}/pkg-config' >> "$GITHUB_ENV"
shell: bash
- if: ${{ matrix.use_spm }}
uses: actions/cache@v4
name: SPM cache setup
with:
path: hylo/.build
key: ${{ runner.os }}-${{ matrix.spm_configuration }}-spm-${{ hashFiles('hylo/**/Package.resolved') }}
restore-keys: |
${{ runner.os }}-${{ matrix.spm_configuration }}-spm-
- if: ${{ matrix.on_windows_and_spm_works }}
name: Build support library
run: clang -c ./StandardLibrary/Sources/LibC.c -o HyloLibC.lib
working-directory: hylo
- if: ${{ matrix.on_windows_and_spm_works }}
name: Build the dependencies of build tools
run: |
echo 'SPM_BUILD_TOOL_SUPPORT_NO_REENTRANT_BUILD=1' >> $env:GITHUB_ENV
swift build ${{ env.spm-build-options }} --target BuildToolDependencies
# https://github.com/apple/swift/issues/72121
if (-not $?) {
swift build ${{ env.spm-build-options }} --target BuildToolDependencies
}
working-directory: hylo
- if: ${{ matrix.use_spm }}
name: Build
run: |
swift build -c ${{ matrix.spm_configuration }} ${{ env.spm-build-options }} --build-tests
${{ matrix.windows_only }} if (-not $?) { swift build ${{ env.spm-build-options }} --target BuildToolDependencies }
working-directory: hylo
- if: ${{ matrix.use_spm }}
name: Test
run: |
swift test --skip-build -c ${{ matrix.spm_configuration }} ${{ env.spm-build-options }} ${{ env.spm-test-options }}
${{ matrix.windows_only }} if (-not $?) { swift test -c ${{ matrix.spm_configuration }} ${{ env.spm-test-options }} }
working-directory: hylo
- name: Output compiler version
run: cmake --build hylo/.ninja-build --target output_compiler_version -- --quiet&