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