Skip to content

Commit

Permalink
Refactor build workflow with template
Browse files Browse the repository at this point in the history
  • Loading branch information
koliyo committed Oct 1, 2023
1 parent 36be64a commit 74b72f6
Show file tree
Hide file tree
Showing 3 changed files with 213 additions and 175 deletions.
207 changes: 207 additions & 0 deletions .github/workflows/build-and-test-template.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
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:
workflow_call:
inputs:
build-type:
description: 'The build configuration type'
default: 'debug'
required: false
type: string

jobs:
# build-devcontainer-linux:
# name: "Build and test: ${{ matrix.host.os }}/${{ inputs.build-type }}"
# strategy:
# fail-fast: false
# matrix:
# host: [
# { type: linux, os: ubuntu-latest,
# build-options: "-v --build-tests -Xswiftc -enable-testing",
# test-options: "-v --enable-code-coverage"
# }
# ]
# configuration: [ "debug", "release" ]

# runs-on: ${{ matrix.host.os }}
# steps:
# - uses: actions/checkout@v3

# - uses: actions/cache@v3
# with:
# path: .build
# key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
# restore-keys: |
# ${{ runner.os }}-spm-

# - name: Build and Test
# uses: devcontainers/[email protected]
# with:
# runCmd: |
# set -eo pipefail
# swift package resolve
# .build/checkouts/Swifty-LLVM/Tools/make-pkgconfig.sh llvm.pc
# export PKG_CONFIG_PATH=$PWD
# swift build -c ${{ inputs.build-type }} ${{ matrix.host.build-options }}
# BUILD_DIR=$(swift build -c ${{ inputs.build-type }} --show-bin-path)
# echo "BUILD_DIR=$BUILD_DIR" >> $GITHUB_ENV
# # swift test -c ${{ inputs.build-type }} ${{ matrix.host.test-options }} |
# # tee testoutput.txt && (
# # (grep -q "[.']EndToEndTests[/. ]test_" testoutput.txt && grep -q "[.']HyloTests[/. ]test_" testoutput.txt) ||
# # (echo "error: generated tests failed to run; see
# # https://github.com/apple/swift-package-manager/issues/6595" && false) )

# # - name: Check code coverage
# # uses: mattpolzin/[email protected]
# # with:
# # SORT_ORDER: +cov
# # MINIMUM_COVERAGE: 84
# # CODECOV_JSON: .build/${{ inputs.build-type }}/codecov/*.json


# - name: Upload Hylo LSP artifacts (${{ inputs.build-type }})
# uses: actions/upload-artifact@v3
# with:
# name: hylo-lsp-artifacts-linux
# path: |
# ${{ env.BUILD_DIR }}/hylo-lsp-client
# ${{ env.BUILD_DIR }}/hylo-lsp-server

build-native-macos:
name: "Build and test: ${{ matrix.host.os }}/${{ inputs.build-type }}"
strategy:
fail-fast: false
matrix:
host: [
{
type: macos, os: macos-13,
build-options: "--build-tests -Xswiftc -enable-testing",
# No coverage support on MacOS
test-options: "-v"
}
]
swift: [
{ version: "5.9" }
]
# configuration: [ $BUILD_TYPE ]
# configuration: [ "debug", "release" ]

runs-on: ${{ matrix.host.os }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: 'true'

- name: Setup swift
uses: swift-actions/setup-swift@v1
with:
swift-version: ${{ matrix.swift.version }}

- run: swift --version

- name: Setup LLVM
uses: KyleMayes/install-llvm-action@v1
with:
version: "15.0"

- run: llvm-config --version

- name: Generate LLVM pkgconfig file
run: |
set -eo pipefail
cd hylo
swift package resolve
.build/checkouts/Swifty-LLVM/Tools/make-pkgconfig.sh llvm.pc
cat llvm.pc
- name: Build (${{ inputs.build-type }})
id: build
run: |
set -eo pipefail
export PKG_CONFIG_PATH=$PWD/hylo
swift build -c ${{ inputs.build-type }} ${{ matrix.host.build-options }}
BUILD_DIR=$(swift build -c ${{ inputs.build-type }} --show-bin-path)
echo "BUILD_DIR=$BUILD_DIR" >> $GITHUB_ENV
# - name: Test (${{ inputs.build-type }})
# run: |
# set -eo pipefail
# export PKG_CONFIG_PATH=$PWD/hylo
# swift test -c ${{ inputs.build-type }} ${{ matrix.host.test-options }} |
# tee testoutput.txt && (
# (grep -q "[.']EndToEndTests[/. ]test_" testoutput.txt && grep -q "[.']HyloTests[/. ]test_" testoutput.txt) ||
# (echo "error: generated tests failed to run; see
# https://github.com/apple/swift-package-manager/issues/6595" && false) )

- name: Upload Hylo LSP artifacts (${{ inputs.build-type }})
uses: actions/upload-artifact@v3
with:
name: hylo-lsp-artifacts-mac
path: |
${{ env.BUILD_DIR }}/hylo-lsp-client
${{ env.BUILD_DIR }}/hylo-lsp-server
# build-native-windows:
# name: "Build and test: windows-latest/release"
# strategy:
# fail-fast: false
# runs-on: windows-latest
# steps:
# - name: Setup swift
# uses: compnerd/gha-setup-swift@main
# with:
# branch: swift-5.8.1-release
# tag: 5.8.1-RELEASE

# - uses: actions/checkout@v3

# - name: Swift version
# run: swift --version

# - name: Set up LLVM 15.0.6
# run: |
# curl.exe -L -O -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}"https://github.com/c3lang/win-llvm/releases/download/llvm_15_0_6/llvm-15.0.6-windows-x86-msvc17-msvcrt.7z
# 7z x llvm-15.0.6-windows-x86-msvc17-msvcrt.7z -oC:\
# Add-Content $env:GITHUB_PATH 'C:\llvm-15.0.6-windows-x86-msvc17-msvcrt\bin'

# - name: Copy LLVM's include and lib to include and lib folder of MSVC
# run: |
# xcopy c:\llvm-15.0.6-windows-x86-msvc17-msvcrt\include\*.* c:\program" "files\microsoft" "visual" "studio\2022\enterprise\vc\tools\msvc\${{ env.VCToolsVersion }}\include\ /s /h
# xcopy c:\llvm-15.0.6-windows-x86-msvc17-msvcrt\lib\*.* c:\program" "files\microsoft" "visual" "studio\2022\enterprise\vc\tools\msvc\${{ env.VCToolsVersion }}\lib\x64\ /s /h

# - run: llvm-config --version

# - name: Build support library
# run: clang -c ./Library/Hylo/LibC.c -o HyloLibC.lib

# - name: Copy support library
# run: xcopy HyloLibC.lib c:\program" "files\microsoft" "visual" "studio\2022\enterprise\vc\tools\msvc\${{ env.VCToolsVersion }}\lib\x64\

# - name: Build (Release)
# id: build
# continue-on-error: true
# run: swift build -v -c release

# - name: Retry on failure
# continue-on-error: false
# if: steps.build.outcome != 'success'
# run: swift build -v -c release

Loading

0 comments on commit 74b72f6

Please sign in to comment.