Skip to content

Commit

Permalink
CI: Move ebtree build to a reusable workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
Geod24 committed Oct 2, 2023
1 parent 5346969 commit 72a0af9
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 70 deletions.
118 changes: 48 additions & 70 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,12 @@ name: CI
on: [push, pull_request]

jobs:
main:
name: Run
setup-ebtree:
uses: ./.github/workflows/ebtree.yml
with:
os: ubuntu-20.04

test:
strategy:
# Disable `fail-fast` because even if things fail for one compiler release
# or build flavour we still want to see how things perform with the others
Expand All @@ -15,83 +19,57 @@ jobs:
os: [ ubuntu-20.04 ]
dc: [ dmd-2.092.1, dmd-2.093.1 ]
flavor: [ prod, devel ]
# Not a matrix row, but referenced as a constant in this file
ebtree_version: [ v6.0.socio10 ]
include:
- { dc: dmd-2.093.1, coverage: 1, closure_check: 1 }

runs-on: ${{ matrix.os }}
timeout-minutes: 30
needs: setup-ebtree
steps:
- name: "Ensure tools/ exists"
run: mkdir -p ${{ github.workspace }}/tools/

- name: 'Restore ebtree ${{ matrix.ebtree_version }} from cache'
id: cache-ebtree
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/tools/
key: ebtree-${{ matrix.ebtree_version }}

- name: 'Checkout ebtree ${{ matrix.ebtree_version }}'
uses: actions/checkout@v4
if: steps.cache-ebtree.outputs.cache-hit != 'true'
with:
repository: sociomantic-tsunami/ebtree
ref: ${{ matrix.ebtree_version }}
# Relative to Github workspace
path: tools/ebtree

- name: 'Build ebtree ${{ matrix.ebtree_version }}'
if: steps.cache-ebtree.outputs.cache-hit != 'true'
run: |
# fpm is used to build the `.deb` and depends on ruby
sudo apt-get update
sudo apt-get install -y build-essential ruby ruby-dev
sudo gem install --no-document fpm
# Build the debian package
# Package lives in tools/ebtree/deb/libebtree6[-{dbg,dev}]_$VERSION-distro_arch.deb
# $VERSION is ${{ matrix.ebtree_version }} without the leading 'v'
# E.g. libebtree6[-{dbg,dev}]_6.0.socio10-bionic_amd64.deb
make -C '${{ github.workspace }}/tools/ebtree' deb
# Checkout this repository and its submodules
- uses: actions/checkout@v4
with:
submodules: true
# Required for codecov (codecov/codecov-action#190)
fetch-depth: 2

- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libxslt-dev liblzo2-dev libgcrypt-dev libgpg-error-dev
sudo dpkg -i ${{ github.workspace }}/tools/ebtree/deb/libebtree6*.deb
- name: 'Restore ebtree from cache'
id: cache-ebtree
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/tools/
key: ebtree-v6.0.socio10

- name: Install compiler
uses: dlang-community/setup-dlang@v1
with:
compiler: ${{ matrix.dc }}
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libxslt-dev liblzo2-dev libgcrypt-dev libgpg-error-dev
sudo dpkg -i ${{ github.workspace }}/tools/ebtree/deb/libebtree6*.deb
# Checkout this repository and its submodules
- uses: actions/checkout@v4
with:
submodules: true
# Required for codecov (codecov/codecov-action#190)
fetch-depth: 2
- name: Install compiler
uses: dlang-community/setup-dlang@v1
with:
compiler: ${{ matrix.dc }}

- name: Test
run: |
make all test V=1 F=${{ matrix.flavor }} COV=${{ matrix.coverage }}
- name: Test
run: |
make all test V=1 F=${{ matrix.flavor }} COV=${{ matrix.coverage }}
- name: Test closures
if: ${{ matrix.closure_check == 1 }}
env:
F: ${{ matrix.flavor }}
DFLAGS: -vgc
run: |
# Run tests and write compiler output to temporary file
compiler_output=`mktemp`
make fasttest 2>&1 > $compiler_output
# Ensure there are no lines about closure allocations in the output.
# Note explicit check for `grep` exit status 1, i.e. no lines found.
! grep -e "closure" $compiler_output
- name: Test closures
if: ${{ matrix.closure_check == 1 }}
env:
F: ${{ matrix.flavor }}
DFLAGS: -vgc
run: |
# Run tests and write compiler output to temporary file
compiler_output=`mktemp`
make fasttest 2>&1 > $compiler_output
# Ensure there are no lines about closure allocations in the output.
# Note explicit check for `grep` exit status 1, i.e. no lines found.
! grep -e "closure" $compiler_output
- name: 'Upload coverage'
if: ${{ matrix.coverage == 1 }}
uses: codecov/codecov-action@v3
with:
flags: ${{ matrix.dc }}-${{ matrix.flavor }}
- name: 'Upload coverage'
if: ${{ matrix.coverage == 1 }}
uses: codecov/codecov-action@v3
with:
flags: ${{ matrix.dc }}-${{ matrix.flavor }}
51 changes: 51 additions & 0 deletions .github/workflows/ebtree.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Build and store ebtree in cache

name: EBTree
on:
workflow_call:
inputs:
os:
type: string
required: true
# More a constant than a real input
ebtree_version:
type: string
default: 'v6.0.socio10'

jobs:
ebtree:
name: Build EBTree
runs-on: ${{ inputs.os }}

steps:
- name: "Ensure tools/ exists"
run: mkdir -p ${{ github.workspace }}/tools/

- name: 'Restore ebtree ${{ inputs.ebtree_version }} from cache'
id: cache-ebtree
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/tools/
key: ebtree-${{ inputs.ebtree_version }}

- name: 'Checkout ebtree ${{ inputs.ebtree_version }}'
uses: actions/checkout@v4
if: steps.cache-ebtree.outputs.cache-hit != 'true'
with:
repository: sociomantic-tsunami/ebtree
ref: ${{ inputs.ebtree_version }}
# Relative to Github workspace
path: tools/ebtree

- name: 'Build ebtree ${{ inputs.ebtree_version }}'
if: steps.cache-ebtree.outputs.cache-hit != 'true'
run: |
# fpm is used to build the `.deb` and depends on ruby
sudo apt-get update
sudo apt-get install -y build-essential ruby ruby-dev
sudo gem install --no-document fpm
# Build the debian package
# Package lives in tools/ebtree/deb/libebtree6[-{dbg,dev}]_$VERSION-distro_arch.deb
# $VERSION is ${{ inputs.ebtree_version }} without the leading 'v'
# E.g. libebtree6[-{dbg,dev}]_6.0.socio10-bionic_amd64.deb
make -C '${{ github.workspace }}/tools/ebtree' deb

0 comments on commit 72a0af9

Please sign in to comment.