on:
push:
branches: [ main ]
tags:
- 'v*'
pull_request:
branches: [ main ]
release:
types: [ published ]
schedule:
- cron: '0 0 * * *'
name: e2e-tests
env:
BATS_VERSION: "1.11.1"
CI_IMAGE: cyphar/libpathrs:ci-latest
jobs:
e2e-test:
strategy:
fail-fast: false
matrix:
lang:
- go
- rust
- python
run-as:
- ""
- "root"
lang-desc: [""]
include:
- lang: python
lang-desc: python3.11
python-version: "3.11"
- lang: go
lang-desc: go1.24
go-version: "1.24"
name: >-
run e2e-tests
${{
format('({0}{1})',
matrix.lang-desc || matrix.lang,
matrix.run-as && format(', {0}', matrix.run-as) || '',
)
}}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: install package
run: |-
sudo apt-get update -y
sudo apt-get install -y moreutils
- if: ${{ matrix.lang != 'rust' }}
uses: dtolnay/rust-toolchain@stable
- if: ${{ matrix.lang != 'rust' }}
name: build libpathrs
run: make release
- if: ${{ matrix.lang != 'rust' }}
name: install libpathrs
run: sudo ./install.sh --prefix=/usr --libdir=/usr/lib
- if: ${{ matrix.lang == 'go' }}
name: install go
uses: actions/setup-go@v6
with:
go-version: ${{ matrix.go-version || 'stable' }}
check-latest: true
- if: ${{ matrix.lang == 'python' }}
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- if: ${{ matrix.lang == 'python' }}
name: install pypa/build
run: >-
python3 -m pip install --user build twine
- name: install bats
uses: bats-core/bats-action@4.0.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
bats-version: ${{ env.BATS_VERSION }}
support-install: false
assert-install: false
detik-install: false
file-install: false
- name: make -C e2e-tests test-${{ matrix.lang }}
run: |-
export BATS=$(which bats)
make -C e2e-tests RUN_AS=${{ matrix.run-as }} test-${{ matrix.lang }}
ctr-ci-image:
runs-on: ubuntu-latest
name: build ci docker image
steps:
- uses: actions/checkout@v6
- name: setup docker buildx
uses: docker/setup-buildx-action@v4
- name: build and cache ci image
uses: docker/build-push-action@v7
with:
context: .
tags: ${{ env.CI_IMAGE }}
cache-from: type=gha
cache-to: type=gha,mode=max
ctr-e2e-test:
runs-on: ubuntu-latest
needs:
- ctr-ci-image
strategy:
fail-fast: false
matrix:
lang:
- python
- go
- rust
runtime:
- docker
run-as:
- unpriv
- CAP_SYS_ADMIN
env:
CONTAINER_RUNTIME: ${{ matrix.runtime }}
CONTAINER_RUN_ARGS: >-
${{ matrix.run-as == 'CAP_SYS_ADMIN' && '--cap-add sys_admin --security-opt=apparmor=unconfined' || '' }}
${{ matrix.run-as == 'unpriv' && '--user 1000:1000' || '' }}
E2E_LANG: ${{ matrix.lang }}
name: >-
(${{ matrix.runtime }})
run e2e-tests
(${{ matrix.lang }}, ${{ matrix.run-as }})
steps:
- uses: actions/checkout@v6
- name: setup docker buildx
uses: docker/setup-buildx-action@v4
- name: build and cache ci image
uses: docker/build-push-action@v7
with:
context: .
tags: ${{ env.CI_IMAGE }}
load: true
cache-from: type=gha
cache-to: type=gha,mode=max
- run: >-
mkdir -p ./target && chmod a+rwx ./target
- name: ${{ matrix.runtime }} run ${{ matrix.lang }} e2e-tests (run as ${{ matrix.run-as }})
run: >-
"$CONTAINER_RUNTIME" run --rm $CONTAINER_RUN_ARGS \
-v $PWD/target:/usr/src/libpathrs/target \
"$CI_IMAGE" \
make -C e2e-tests "test-$E2E_LANG"
e2e-complete:
needs:
- e2e-test
- ctr-e2e-test
runs-on: ubuntu-latest
steps:
- run: echo "End-to-end test CI jobs completed successfully."