Files
Volodymyr Yavdoshenko eca3f383eb fix: ci update
2026-01-10 21:46:45 +02:00

161 lines
4.7 KiB
YAML

name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
format:
name: Check formatting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Check formatting
run: python3 red/scripts/format_rust.py --check
ubuntu:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Build
working-directory: ./red
run: cargo build --release --verbose
- name: Unit tests
working-directory: ./red
run: cargo test --verbose
- name: Install dependencies for tests
run: |
sudo apt-get update
sudo apt-get install -y locales locales-all valgrind
sudo localedef -i en_US -f UTF-8 en_US.UTF-8 || true
sudo localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 || true
sudo localedef -i uk_UA -f UTF-8 uk_UA.UTF-8 || true
sudo localedef -i ja_JP -f EUC-JP ja_JP.eucjp || true
sudo localedef -i ja_JP -f SHIFT_JIS ja_JP.shiftjis || true
sudo localedef -i el_GR -f ISO-8859-7 el_GR.iso88597 || true
- name: Fetch GNU sed tests
working-directory: ./red
run: bash scripts/fetch_gnused_tests.sh
- name: GNU sed tests
working-directory: ./red
run: bash scripts/run_gnused_tests.sh --fail-on-error --compact --no-build --expensive --timeout-sec 300
- name: Verify implementation
working-directory: ./red
run: RED_BIN=target/release/red bash tests/scripts/verify_implementation.sh
- name: Compare with GNU sed
working-directory: ./red
run: RED_BIN=target/release/red bash tests/scripts/compare_all_tests.sh
- name: Multibyte regex tests
working-directory: ./red
run: RED_BIN=target/release/red bash tests/scripts/mb_regex_tests.sh
macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Build
working-directory: ./red
run: cargo build --release --verbose
- name: Unit tests
working-directory: ./red
run: cargo test --verbose
- name: Fetch GNU sed tests
working-directory: ./red
run: bash scripts/fetch_gnused_tests.sh
- name: GNU sed tests
working-directory: ./red
run: bash scripts/run_gnused_tests.sh --fail-on-error --compact --no-build --expensive --timeout-sec 300
windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Build
working-directory: ./red
run: cargo build --release --verbose
- name: Unit tests (library and selected integration tests)
working-directory: ./red
run: cargo test --verbose
- name: Fetch GNU sed tests
working-directory: ./red
shell: bash
run: bash scripts/fetch_gnused_tests.sh
- name: Windows binary mode test (obinary.sh)
working-directory: ./red
shell: bash
run: bash scripts/run_gnused_tests.sh --fail-on-error --compact --no-build --test-pattern "obinary.sh" --timeout-sec 60
selinux:
runs-on: [self-hosted, selinux]
if: github.repository == 'vyavdoshenko/red' # Only run on main repo, not forks
steps:
- uses: actions/checkout@v4
- name: Verify SELinux is enforcing
run: |
mode=$(getenforce)
echo "SELinux mode: $mode"
if [ "$mode" != "Enforcing" ] && [ "$mode" != "Permissive" ]; then
echo "SELinux is not enabled!"
exit 1
fi
- name: Build with SELinux support
working-directory: ./red
run: cargo build --release --features selinux
- name: Verify SELinux in version
working-directory: ./red
run: |
./target/release/red --version
./target/release/red --version | grep -q "with SELinux" || exit 1
./target/release/red --version | grep -q "SELinux is enabled" || exit 1
- name: Unit tests with SELinux feature
env:
LANG: en_US.UTF-8
LC_ALL: en_US.UTF-8
working-directory: ./red
run: cargo test --features selinux
- name: Fetch GNU sed tests
working-directory: ./red
run: bash scripts/fetch_gnused_tests.sh
- name: Run SELinux test
working-directory: ./red
run: bash scripts/run_gnused_tests.sh --test-pattern "inplace-selinux.sh" --no-build --compact --fail-on-error --timeout-sec 60