fix: macOS Seatbelt denyRead rules ineffective due to file-read* wildcard #52
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and test | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| name: Build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache: true | |
| - name: Download dependencies | |
| run: go mod download | |
| - name: Build | |
| run: make build-ci | |
| lint: | |
| name: Lint | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache: true | |
| - name: Download dependencies | |
| run: go mod download | |
| - name: Download tun2socks for embedding | |
| run: make download-tun2socks | |
| - name: Lint | |
| uses: golangci/golangci-lint-action@v9 | |
| with: | |
| version: v2.10.1 | |
| test-linux: | |
| name: Test (Linux) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache: true | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Set up Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| - name: Download dependencies | |
| run: go mod download | |
| - name: Install Linux sandbox dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| bubblewrap \ | |
| socat \ | |
| uidmap \ | |
| curl \ | |
| netcat-openbsd \ | |
| ripgrep | |
| # Configure subuid/subgid for the runner user (required for unprivileged user namespaces) | |
| echo "$(whoami):100000:65536" | sudo tee -a /etc/subuid | |
| echo "$(whoami):100000:65536" | sudo tee -a /etc/subgid | |
| # Ubuntu 24.04 restricts unprivileged user namespaces via AppArmor. | |
| # Disable the restriction so bwrap can create namespaces without setuid. | |
| # (Setuid mode disallows --cap-add for non-root, which greywall needs for transparent proxy.) | |
| sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 | |
| - name: Verify sandbox dependencies | |
| run: | | |
| echo "=== Checking sandbox dependencies ===" | |
| bwrap --version | |
| socat -V | head -1 | |
| echo "User namespaces enabled: $(cat /proc/sys/kernel/unprivileged_userns_clone 2>/dev/null || echo 'check not available')" | |
| echo "Kernel version: $(uname -r)" | |
| echo "uidmap installed: $(which newuidmap 2>/dev/null && echo yes || echo no)" | |
| echo "subuid configured: $(grep $(whoami) /etc/subuid 2>/dev/null || echo 'not configured')" | |
| echo "bwrap permissions: $(ls -la $(which bwrap))" | |
| echo "=== Testing bwrap basic functionality ===" | |
| bwrap --ro-bind / / -- /bin/echo "bwrap works!" | |
| echo "=== Testing bwrap with user namespace ===" | |
| bwrap --ro-bind / / --unshare-user --uid 0 --gid 0 -- /bin/echo "bwrap user namespace works!" | |
| - name: Download tun2socks for embedding | |
| run: make download-tun2socks | |
| - name: Run unit and integration tests | |
| run: make test-ci | |
| - name: Build binary for smoke tests | |
| run: make build-ci | |
| - name: Run smoke tests | |
| run: GREYWALL_TEST_NETWORK=1 ./scripts/smoke_test.sh ./greywall | |
| test-macos: | |
| name: Test (macOS) | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Go | |
| uses: actions/setup-go@v5 | |
| with: | |
| go-version-file: go.mod | |
| cache: true | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Set up Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| - name: Download dependencies | |
| run: go mod download | |
| - name: Install macOS dependencies | |
| run: | | |
| brew install ripgrep coreutils | |
| - name: Verify sandbox dependencies | |
| run: | | |
| echo "=== Checking sandbox dependencies ===" | |
| echo "macOS version: $(sw_vers -productVersion)" | |
| sandbox-exec -p '(version 1)(allow default)' /bin/echo "sandbox-exec works" | |
| - name: Run unit and integration tests | |
| run: make test-ci | |
| - name: Build binary for smoke tests | |
| run: make build-ci | |
| - name: Run smoke tests | |
| run: GREYWALL_TEST_NETWORK=1 ./scripts/smoke_test.sh ./greywall |