Update dependencies #529
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: CI | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- '*' | |
pull_request: {} | |
env: | |
NJS_VERSION: 0.8.3 | |
jobs: | |
info: | |
runs-on: ubuntu-latest | |
outputs: | |
has_tag: ${{ steps.get_info.outputs.has_tag }} | |
tag: ${{ steps.get_info.outputs.tag }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- id: get_info | |
run: | | |
tag="${GITHUB_REF##*/}" | |
echo "has_tag=$has_tag" >> $GITHUB_OUTPUT | |
echo "tag=$tag" >> $GITHUB_OUTPUT | |
env: | |
has_tag: ${{ startsWith(github.ref, 'refs/tags/') }} | |
- name: Validate version tag | |
if: github.event_name == 'push' && steps.get_info.outputs.has_tag == 'true' | |
run: | | |
if [ $(cat VERSION) != ${{ steps.get_info.outputs.tag }} ]; then | |
echo "::error file=VERSION,line=1,col=1::Version string in VERSION ($(cat VERSION)) does not match the tag string (${{ steps.get_info.outputs.tag }})" | |
exit 1 | |
fi | |
test: | |
needs: [info] | |
strategy: | |
matrix: | |
dc: [dmd-2.107.1, ldc-1.37.0 ] | |
experimental: [false] | |
include: | |
- dc: dmd-latest | |
experimental: true | |
- dc: ldc-latest | |
experimental: true | |
runs-on: ubuntu-latest | |
continue-on-error: ${{ matrix.experimental }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
${{ github.workspace }}/.dub | |
key: ${{ runner.os }}-${{ runner.arch }}-glibc-dub-${{ matrix.dc }}-${{ hashFiles('dub.selections.json') }} | |
- id: njs_cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
${{ github.workspace }}/.njs | |
key: ${{ runner.os }}-${{ runner.arch }}-${{ env.NJS_VERSION }} | |
- uses: dlang-community/setup-dlang@v1 | |
with: | |
compiler: ${{ matrix.dc }} | |
- name: Install njs libs | |
if: steps.njs_cache.outputs.cache-hit != 'true' | |
run: | | |
./.devcontainer/setup-njs.sh ${{ env.NJS_VERSION }} .njs | |
- name: Run tests | |
run: | | |
dub --cache=local test | |
env: | |
NJS_BASE: ${{ github.workspace }}/.njs | |
CPATH: ${{ github.workspace }}/.njs/include | |
LIBRARY_PATH: ${{ github.workspace }}/.njs/lib | |
build-linux: | |
needs: [info] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
/tmp/.buildx-cache | |
${{ github.workspace }}/.dub | |
key: ${{ runner.os }}-buildx | |
- name: Build container to build single binary | |
id: dev_container | |
uses: docker/build-push-action@v5 | |
with: | |
file: Dockerfile.build | |
load: true | |
tags: shaft-dev | |
cache-from: type=local,src=/tmp/.buildx-cache | |
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max | |
build-args: | | |
NJS_VERSION=${{ env.NJS_VERSION }} | |
- run: | | |
docker run --rm -i -v $GITHUB_WORKSPACE:/workdir -e GITHUB_REF=$GITHUB_REF shaft-dev \ | |
sh -c "dub --cache=local build -b release-static && strip bin/shaft" | |
- name: Setup cache | |
run: | | |
rm -rf /tmp/.buildx-cache | |
mv /tmp/.buildx-cache-new /tmp/.buildx-cache | |
sudo chown -R $UID:$UID .dub | |
- name: Test shaft-specific features | |
uses: common-workflow-lab/run-tests@v1 | |
with: | |
test-list: ${{ github.workspace }}/tests/test.yml | |
runner: ${{ github.workspace }}/bin/shaft | |
timeout: 30 | |
result-title: Results of shaft-specific features | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: shaft-linux-${{ runner.arch }}-master | |
path: ${{ github.workspace }}/bin/shaft | |
build-mac: | |
needs: [info] | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/cache@v4 | |
with: | |
path: | | |
${{ github.workspace }}/.dub | |
key: ${{ runner.os }}-${{ runner.arch }}-dub-${{ hashFiles('dub.selections.json') }} | |
- id: njs_cache | |
uses: actions/cache@v4 | |
with: | |
path: | | |
${{ github.workspace }}/.njs | |
key: ${{ runner.os }}-${{ runner.arch }}-${{ env.NJS_VERSION }} | |
- uses: dlang-community/setup-dlang@v1 | |
with: | |
compiler: ldc-1.37.0 | |
- name: Install njs libs | |
if: steps.njs_cache.outputs.cache-hit != 'true' | |
run: | | |
./.devcontainer/setup-njs.sh ${{ env.NJS_VERSION }} .njs | |
- name: Run tests | |
run: | | |
dub --cache=local test | |
env: | |
NJS_BASE: ${{ github.workspace }}/.njs | |
C_INCLUDE_PATH: ${{ github.workspace }}/.njs/include | |
LIBRARY_PATH: ${{ github.workspace }}/.njs/lib | |
- name: Build a binary | |
run: | | |
dub --cache=local build -b release | |
env: | |
NJS_BASE: ${{ github.workspace }}/.njs | |
C_INCLUDE_PATH: ${{ github.workspace }}/.njs/include | |
LIBRARY_PATH: ${{ github.workspace }}/.njs/lib | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: shaft-osx-${{ runner.arch }}-master | |
path: ${{ github.workspace }}/bin/shaft | |
conformance: | |
needs: [test, build-linux, build-mac] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/download-artifact@v4 | |
with: | |
name: shaft-linux-${{ runner.arch }}-master | |
- run: chmod +x shaft | |
- name: Run conformance tests | |
id: run-conformance | |
uses: common-workflow-lab/run-conformance-tests@v1 | |
with: | |
cwlVersion: v1.0 | |
runner: ${{ github.workspace }}/shaft | |
timeout: 30 | |
tags: command_line_tool,expression_tool | |
extra: --remove-tmpdir --veryverbose --enable-compat=extended-props | |
- name: Save badges | |
if: success() && github.event_name == 'push' | |
uses: common-workflow-lab/upload-conformance-badges@v1 | |
with: | |
cwlVersion: v1.0 | |
runner-name: shaft | |
badgedir: ${{ steps.run-conformance.outputs.badgedir }} | |
repository: ${{ github.repository_owner }}/conformance | |
upload-default-branch: true | |
ssh-key: ${{ secrets.CONFORMANCE_KEY }} | |
release: | |
runs-on: ubuntu-latest | |
needs: [info, conformance] | |
if: github.event_name == 'push' && needs.info.outputs.has_tag == 'true' | |
steps: | |
- name: Generate release text | |
run: | | |
cat << EOS > $GITHUB_WORKSPACE/release.md | |
## Conformance tests for CWL ${cwlVersion} | |
[](https://github.com/tom-tan/shaft/releases/tag/${tag}) [](https://github.com/tom-tan/shaft/tree/${tag}) | |
### Classes | |
[](https://www.commonwl.org/v1.0/CommandLineTool.html) [](https://www.commonwl.org/v1.0/Workflow.html#ExpressionTool) | |
### Required features | |
[](https://www.commonwl.org/v1.0/) | |
### Optional features | |
[](https://www.commonwl.org/v1.0/CommandLineTool.html#DockerRequirement) [](https://www.commonwl.org/v1.0/CommandLineTool.html#EnvVarRequirement) [](https://www.commonwl.org/v1.0/CommandLineTool.html#InitialWorkDirRequirement) [](https://www.commonwl.org/v1.0/CommandLineTool.html#InlineJavascriptRequirement) [](https://www.commonwl.org/v1.0/CommandLineTool.html#ResourceRequirement) [](https://www.commonwl.org/v1.0/CommandLineTool.html#SchemaDefRequirement) [](https://www.commonwl.org/v1.0/CommandLineTool.html#ShellCommandRequirement) | |
EOS | |
env: | |
cwlVersion: v1.0 | |
tag: ${{ needs.info.outputs.tag }} | |
- uses: actions/download-artifact@v4 | |
with: | |
name: shaft-linux-X64-master | |
- run: | | |
chmod +x shaft | |
tar cf ${GITHUB_WORKSPACE}/shaft-linux-x86_64.tar.gz shaft | |
rm shaft | |
- uses: actions/download-artifact@v4 | |
with: | |
name: shaft-osx-X64-master | |
- run: | | |
chmod +x shaft | |
tar cf ${GITHUB_WORKSPACE}/shaft-osx-x86_64.tar.gz shaft | |
rm shaft | |
- uses: softprops/action-gh-release@v1 | |
id: create_release | |
with: | |
body_path: ${{ github.workspace }}/release.md | |
files: | | |
shaft-linux-x86_64.tar.gz | |
shaft-osx-x86_64.tar.gz |