diff options
Diffstat (limited to '.github/workflows/ci.yml')
| -rw-r--r-- | .github/workflows/ci.yml | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..973666c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,162 @@ +# +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# + +name: CI +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + build: + strategy: + matrix: + go: ['1.23', '1.24', '1.25'] + name: Build (Go ${{ matrix.go }}) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go }} + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y libpam0g-dev + - name: Build + run: make + + build-32bit: + name: Build (32-bit) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v2 + with: + go-version: '1.25' + - name: Install dependencies + run: | + sudo dpkg --add-architecture i386 + sudo apt-get update + sudo apt-get install -y libpam0g-dev:i386 gcc-multilib + - name: Build + run: CGO_ENABLED=1 GOARCH=386 make + + run-integration-tests: + name: Run integration tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v2 + with: + go-version: '1.25' + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y libpam0g-dev e2fsprogs keyutils + - name: Run integration tests + run: | + make test-setup + keyctl link @u @s + make test + make test-teardown + + # This isn't working currently because qemu user-mode emulation doesn't + # support passing through the keyctl() system call and the fscrypt ioctls. + # Hopefully GitHub Actions will natively support other architectures soon... + # + # run-integration-tests-other-arch: + # name: Run integration tests (${{ matrix.arch }}) + # strategy: + # matrix: + # arch: [armv7, aarch64, ppc64le] + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v4 + # - uses: uraimo/run-on-arch-action@v2.0.5 + # with: + # arch: ${{ matrix.arch }} + # distro: buster + # githubToken: ${{ github.token }} + # # Needed for 'make test-setup' to mount the test filesystem. + # dockerRunArgs: --privileged + # install: | + # apt-get update + # apt-get install -y build-essential git sudo golang-go \ + # libpam0g-dev e2fsprogs keyutils + # run: | + # make test-setup + # keyctl link @u @s + # make test + # make test-teardown + + test-cgroup-integration: + name: Test cgroup integration + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v2 + with: + go-version: '1.25' + - name: Build test binary + run: go test -c -o cgroup.test ./cgroup/ + - name: Run cgroup integration test + run: | + docker run --rm \ + --cpus=0.5 --memory=128m \ + -e CGROUP_EXPECTED_CPU_QUOTA=0.5 \ + -e CGROUP_EXPECTED_MEMORY_LIMIT=134217728 \ + -v "$PWD/cgroup.test":/cgroup.test:ro \ + debian:bookworm-slim \ + /cgroup.test -test.run TestIntegrationCgroupLimits -test.v + + run-cli-tests: + name: Run command-line interface tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v2 + with: + go-version: '1.25' + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y libpam0g-dev e2fsprogs expect keyutils + - name: Run command-line interface tests + run: make cli-test + + generate-format-and-lint: + name: Generate, format, and lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v2 + with: + go-version: '1.25' + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y libpam0g-dev shellcheck + make tools + - name: Generate + run: make gen && bin/files-changed proto + - name: Format + run: make format && bin/files-changed format + - name: Lint + run: make lint |