Skip to content

Build, Lint and Test #2875

Build, Lint and Test

Build, Lint and Test #2875

name: Build, Lint and Test
on:
pull_request: {}
workflow_dispatch:
inputs:
runner:
description: Which runner to use
type: choice
default: 'ubuntu-22.04'
required: true
options:
- 'ubuntu-22.04'
- 'large-ubuntu-22.04-xxl'
schedule:
- cron: '37 13,1 * * *'
env:
BUILD_KIT_IMAGE: ghcr.io/everest/build-kit-alpine:v1.2.0
jobs:
lint:
name: Lint
runs-on: ${{ inputs.runner || 'ubuntu-22.04' }}
steps:
- name: Checkout everest-core
uses: actions/checkout@v4.1.6
with:
path: source
- name: Run clang-format
uses: everest/everest-ci/github-actions/run-clang-format@v1.1.0
with:
source-dir: source
extensions: hpp,cpp
exclude: cache
build:
name: Build and Unit Tests
runs-on: ${{ inputs.runner || 'ubuntu-22.04' }}
steps:
- name: Format branch name for cache key
run: |
BRANCH_NAME_FOR_CACHE="${GITHUB_REF_NAME//-/_}"
echo "branch_name_for_cache=${BRANCH_NAME_FOR_CACHE}" >> "$GITHUB_ENV"
- name: Setup cache
uses: actions/cache@v3
with:
path: cache
key: compile-${{ env.branch_name_for_cache }}-${{ github.sha }}
restore-keys: |
compile-${{ env.branch_name_for_cache }}-
compile-
- name: Checkout everest-core
uses: actions/checkout@v4.1.6
with:
path: source
- name: Setup run scripts
run: |
mkdir scripts
rsync -a source/.ci/build-kit/ scripts
- name: Pull build-kit image
run: |
docker pull --quiet ${{ env.BUILD_KIT_IMAGE }}
docker image tag ${{ env.BUILD_KIT_IMAGE }} build-kit
- name: Compile
run: |
docker run \
--volume "$(pwd):/ext" \
--name compile-container \
build-kit run-script compile
- name: Commit compile-container
run: |
docker commit compile-container build-image
- name: Run unit tests
run: |
docker run \
--volume "$(pwd):/ext" \
--name unit-tests-container \
build-image run-script run_unit_tests
- name: Create dist
run: |
docker run \
--volume "$(pwd):/ext" \
--name install-container \
build-image run-script install
- name: Tar dist dir and keep permissions
run: |
tar -czf dist.tar.gz dist
- name: Upload dist artifact
uses: actions/upload-artifact@v4.3.3
with:
path: dist.tar.gz
name: dist
- name: Upload wheels artifact
uses: actions/upload-artifact@v4.3.3
with:
path: dist-wheels
name: wheels
- name: Archive unit test results
if: always()
uses: actions/upload-artifact@v4.3.3
with:
name: ctest-report
path: ${{ github.workspace }}/ctest-report
integration-tests:
name: Integration Tests
needs: build
runs-on: ${{ inputs.runner || 'ubuntu-22.04' }}
steps:
- name: Download dist dir
uses: actions/download-artifact@v4.1.2
with:
name: dist
- name: Extract dist.tar.gz
run: |
tar -xzf ${{ github.workspace }}/dist.tar.gz -C ${{ github.workspace }}
- name: Download wheels
uses: actions/download-artifact@v4.1.2
with:
name: wheels
path: wheels
- name: Checkout everest-core
uses: actions/checkout@v4.1.6
with:
path: source
- name: Setup run scripts
run: |
mkdir scripts
rsync -a source/.ci/build-kit/ scripts
- name: Pull build-kit image
run: |
docker pull --quiet ${{ env.BUILD_KIT_IMAGE }}
docker image tag ${{ env.BUILD_KIT_IMAGE }} build-kit
- name: Create integration-image
run: |
docker run \
--volume "$(pwd):/ext" \
--name prepare-container \
build-kit run-script prepare_integration_tests
docker commit prepare-container integration-image
- name: Run integration tests
run: |
pushd source/.ci/e2e
docker-compose run \
e2e-test-server \
run-script run_integration_tests
- name: Upload result & report as artifact
if: always()
uses: actions/upload-artifact@v4.3.3
with:
path: |
${{ github.workspace }}/result.xml
${{ github.workspace }}/report.html
name: pytest-results
- name: Render result
if: always()
uses: pmeier/pytest-results-action@v0.6.0
with:
path: ${{ github.workspace }}/result.xml
summary: True
display-options: fEX
fail-on-empty: True
title: Test results