| name: validate |
| on: |
| push: |
| tags: |
| - v* |
| branches: |
| - main |
| - release-* |
| pull_request: |
| env: |
| GO_VERSION: 1.23.x |
| permissions: |
| contents: read |
| |
| jobs: |
| keyring: |
| runs-on: ubuntu-24.04 |
| steps: |
| - uses: actions/checkout@v4 |
| - name: check runc.keyring |
| run: make validate-keyring |
| |
| lint: |
| timeout-minutes: 30 |
| permissions: |
| contents: read |
| pull-requests: read |
| checks: write # to allow the action to annotate code in the PR. |
| runs-on: ubuntu-24.04 |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| fetch-depth: 2 |
| - uses: actions/setup-go@v5 |
| with: |
| go-version: "${{ env.GO_VERSION }}" |
| - name: install deps |
| run: | |
| sudo apt -q update |
| sudo apt -qy install libseccomp-dev |
| - uses: golangci/golangci-lint-action@v6 |
| with: |
| version: v1.64 |
| # Extra linters, only checking new code from a pull request to main. |
| - name: lint-extra |
| if: github.event_name == 'pull_request' && github.base_ref == 'main' |
| run: | |
| golangci-lint run --config .golangci-extra.yml --new-from-rev=HEAD~1 |
| |
| go-fix: |
| runs-on: ubuntu-24.04 |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| fetch-depth: 2 |
| - uses: actions/setup-go@v5 |
| with: |
| go-version: "${{ env.GO_VERSION }}" |
| - name: install deps |
| run: | |
| sudo apt -q update |
| sudo apt -qy install libseccomp-dev |
| - name: run go fix |
| run: | |
| go fix ./... |
| git diff --exit-code |
| |
| compile-buildtags: |
| runs-on: ubuntu-24.04 |
| env: |
| # Don't ignore C warnings. Note that the output of "go env CGO_CFLAGS" by default is "-g -O2", so we keep them. |
| CGO_CFLAGS: -g -O2 -Werror |
| steps: |
| - uses: actions/checkout@v4 |
| - name: install go |
| uses: actions/setup-go@v5 |
| with: |
| go-version: "${{ env.GO_VERSION }}" |
| - name: compile with no build tags |
| run: make BUILDTAGS="" |
| |
| codespell: |
| runs-on: ubuntu-24.04 |
| steps: |
| - uses: actions/checkout@v4 |
| - name: install deps |
| # Version of codespell bundled with Ubuntu is way old, so use pip. |
| run: pip install --break-system-packages codespell==v2.3.0 |
| - name: run codespell |
| run: codespell |
| |
| shfmt: |
| runs-on: ubuntu-24.04 |
| steps: |
| - uses: actions/checkout@v4 |
| - name: shfmt |
| run: make shfmt |
| |
| shellcheck: |
| runs-on: ubuntu-24.04 |
| steps: |
| - uses: actions/checkout@v4 |
| - name: install shellcheck |
| env: |
| VERSION: v0.10.0 |
| BASEURL: https://github.com/koalaman/shellcheck/releases/download |
| SHA256: f35ae15a4677945428bdfe61ccc297490d89dd1e544cc06317102637638c6deb |
| run: | |
| mkdir ~/bin |
| curl -sSfL --retry 5 $BASEURL/$VERSION/shellcheck-$VERSION.linux.x86_64.tar.xz | |
| tar xfJ - -C ~/bin --strip 1 shellcheck-$VERSION/shellcheck |
| sha256sum --strict --check - <<<"$SHA256 *$HOME/bin/shellcheck" |
| # make sure to remove the old version |
| sudo rm -f /usr/bin/shellcheck |
| # Add ~/bin to $PATH. |
| echo ~/bin >> $GITHUB_PATH |
| - uses: lumaxis/shellcheck-problem-matchers@v2 |
| - name: run |
| run: make shellcheck |
| - name: check-config.sh |
| run : ./script/check-config.sh |
| |
| space-at-eol: |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v4 |
| - run: rm -fr vendor |
| - run: if git -P grep -I -n '\s$'; then echo "^^^ extra whitespace at EOL, please fix"; exit 1; fi |
| |
| deps: |
| runs-on: ubuntu-24.04 |
| steps: |
| - uses: actions/checkout@v4 |
| - name: install go |
| uses: actions/setup-go@v5 |
| with: |
| go-version: "${{ env.GO_VERSION }}" |
| check-latest: true |
| - name: verify deps |
| run: make verify-dependencies |
| |
| |
| commit: |
| permissions: |
| contents: read |
| pull-requests: read |
| runs-on: ubuntu-24.04 |
| # Only check commits on pull requests. |
| if: github.event_name == 'pull_request' |
| steps: |
| - name: get pr commits |
| id: 'get-pr-commits' |
| uses: tim-actions/get-pr-commits@v1.3.1 |
| with: |
| token: ${{ secrets.GITHUB_TOKEN }} |
| |
| - name: check subject line length |
| uses: tim-actions/commit-message-checker-with-regex@v0.3.2 |
| with: |
| commits: ${{ steps.get-pr-commits.outputs.commits }} |
| pattern: '^.{0,72}(\n.*)*$' |
| error: 'Subject too long (max 72)' |
| |
| cfmt: |
| runs-on: ubuntu-24.04 |
| steps: |
| - name: checkout |
| uses: actions/checkout@v4 |
| with: |
| fetch-depth: 0 |
| - name: install deps |
| run: | |
| sudo apt -qq update |
| sudo apt -qqy install indent |
| - name: cfmt |
| run: | |
| make cfmt |
| git diff --exit-code |
| |
| |
| release: |
| timeout-minutes: 30 |
| runs-on: ubuntu-24.04 |
| steps: |
| - name: checkout |
| uses: actions/checkout@v4 |
| with: |
| fetch-depth: 0 |
| |
| - name: check CHANGELOG.md |
| run: make verify-changelog |
| |
| # We have to run this under Docker as Ubuntu (host) does not support all |
| # the architectures we want to compile test against, and Dockerfile uses |
| # Debian (which does). |
| # |
| # XXX: as currently this is the only job that is using Docker, we are |
| # building and using the runcimage locally. In case more jobs running |
| # under Docker will emerge, it will be good to have a separate make |
| # runcimage job and share its result (the docker image) with whoever |
| # needs it. |
| - name: build docker image |
| run: make runcimage |
| - name: make releaseall |
| run: make releaseall |
| - name: upload artifacts |
| uses: actions/upload-artifact@v4 |
| with: |
| name: release-${{ github.run_id }} |
| path: release/* |
| |
| |
| get-images: |
| runs-on: ubuntu-24.04 |
| steps: |
| - uses: actions/checkout@v4 |
| with: |
| fetch-depth: 0 |
| - name: install bashbrew |
| env: |
| BASEURL: https://github.com/docker-library/bashbrew/releases/download |
| VERSION: v0.1.7 |
| SHA256: 6b71a6fccfb2025d48a2b23324836b5513c29abfd2d16a57b7a2f89bd02fe53a |
| run: | |
| mkdir ~/bin |
| curl -sSfL --retry 5 -o ~/bin/bashbrew \ |
| $BASEURL/$VERSION/bashbrew-amd64 |
| sha256sum --strict --check - <<<"$SHA256 *$HOME/bin/bashbrew" |
| chmod a+x ~/bin/bashbrew |
| # Add ~/bin to $PATH. |
| echo ~/bin >> $GITHUB_PATH |
| - name: check that get-images.sh is up to date |
| run: | |
| cd tests/integration |
| ./bootstrap-get-images.sh > get-images.sh |
| git diff --exit-code |
| |
| all-done: |
| needs: |
| - cfmt |
| - codespell |
| - commit |
| - compile-buildtags |
| - deps |
| - get-images |
| - go-fix |
| - keyring |
| - lint |
| - release |
| - shellcheck |
| - shfmt |
| - space-at-eol |
| runs-on: ubuntu-24.04 |
| steps: |
| - run: echo "All jobs completed" |