diff options
| author | Eric Biggers <ebiggers@google.com> | 2020-11-21 15:29:26 -0800 |
|---|---|---|
| committer | Joseph Richey <joerichey94@gmail.com> | 2020-11-26 01:08:36 -0800 |
| commit | 0692c00a2af75a5ec6c26e58adb37fa152912dce (patch) | |
| tree | f2126bcef80fd3037613069f972447c9e3aceecf | |
| parent | 7280a5e81ecc1092bcec58e3fb7f494fc6d95dfa (diff) | |
Switch from Travis CI to GitHub Actions
travis-ci.org is being shut down, so switch to GitHub Actions.
It should be mostly equivalent, but I did drop functionality in a couple
cases:
- Publishing release binaries. I don't think providing Linux binaries
is useful, since people build their own anyway. So I left this out.
- Build and testing on ppc64le. GitHub Actions only natively supports
x86. I tried uraimo/run-on-arch-action, which uses Docker and QEMU
user-mode emulation, but the fscrypt tests can't be run because
QEMU user-mode emulation doesn't support all the needed system calls.
| -rw-r--r-- | .github/workflows/ci.yml | 127 | ||||
| -rw-r--r-- | .travis.yml | 93 | ||||
| -rw-r--r-- | CONTRIBUTING.md | 6 | ||||
| -rw-r--r-- | README.md | 2 |
4 files changed, 131 insertions, 97 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1a8de0b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,127 @@ +# +# 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: [pull_request, push] + +jobs: + build: + strategy: + matrix: + go: ['1.14', '1.13', '1.12', '1.11'] + name: Build (Go ${{ matrix.go }}) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go }} + - name: Install dependencies + run: sudo apt-get install -y libpam0g-dev + - name: Build + run: GO111MODULE=on make + + build-32bit: + name: Build (32-bit) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + - 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@v2 + - uses: actions/setup-go@v2 + - name: Install dependencies + run: sudo apt-get install -y libpam0g-dev e2fsprogs keyutils + - name: Run integration tests + run: | + make test-setup + keyctl link @u @s + make coverage.out + make test-teardown + - name: Report coverage + uses: shogo82148/actions-goveralls@v1 + with: + path-to-profile: coverage.out + + # 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@v2 + # - 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: | + # export GO111MODULE=on + # make test-setup + # keyctl link @u @s + # make test + # make test-teardown + + run-cli-tests: + name: Run command-line interface tests + # The cli tests require kernel 5.4 or later, and thus Ubuntu 20.04 or later. + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + - name: Install dependencies + run: 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@v2 + - uses: actions/setup-go@v2 + - name: Install dependencies + run: | + 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 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 6238239..0000000 --- a/.travis.yml +++ /dev/null @@ -1,93 +0,0 @@ -language: go -sudo: false -dist: focal -arch: - - amd64 - - ppc64le -go: 1.13.x - -notifications: - email: false - -stages: - - name: build - if: type = push - - name: presubmits - if: type = pr OR branch = master OR tag IS present - - name: deploy - if: type = push AND tag IS present - -jobs: - include: - - stage: build - install: skip - script: make - - - stage: presubmits - name: Generate, Format, and Lint - before_install: - - sudo apt-get -y install shellcheck - install: - - make tools - script: - - make gen - - bin/files-changed proto - - make format - - bin/files-changed format - - make lint - - - &build - name: Build and Unit Tests - install: skip - script: - - GO111MODULE=on go get github.com/google/fscrypt/cmd/fscrypt - - make - - - <<: *build - go: 1.12.x - - - <<: *build - go: 1.11.x - - - name: Build and Unit Tests (32-bit) - before_install: - - sudo apt-get -y install gcc-multilib libpam0g-dev:i386 - script: - - GO111MODULE=on go get github.com/google/fscrypt/cmd/fscrypt - - CGO_ENABLED=1 GOARCH=386 make - - - name: Integration Tests - sudo: required - before_install: sudo apt-get -y install e2fsprogs - install: - - go get -u github.com/mattn/goveralls - - make test-setup - script: - - make coverage.out - - goveralls -coverprofile=coverage.out -service=travis-ci - - - name: Command-line interface tests - sudo: required - before_install: - - sudo apt-get -y install e2fsprogs expect keyutils - script: - - GO111MODULE=on go get github.com/google/fscrypt/cmd/fscrypt - - make cli-test - - - stage: deploy - name: Release Binaries - install: skip - script: skip - before_deploy: make - deploy: - - provider: releases - api_key: - secure: BOmjKf9vIb9QwlhDTK09St+Wc9AfMBMBsUnCrjVCvvWwZoYWNIigXheTc5ZqgokqWcDEr3NbytOfKxc5RFxlTMaQoyyC/nABuLxpGocjEkHFQqrYGKfH1swRmvlQndjJr660hqCggPHIw1B2oXE/PD9wLmyno2J70Vp6slTjSbHq1WFHEwtSf6Vm6SMetIWY5Mv/fNIPXJ781Wmx2b1PhWA7HOPoIcMXRwew5aBY7vMIS6P2cDt11Of2kTdWKPpf6SLE6bETgsvJZDpWxb7WWJ0/6NUXtT7q3wkhfgqr3fFZazjInMaWT8VVadiV+gPRyELBYSDsGW8zkBe4NEO45eMOtF3z/1SpYhSFIfK0hGFp0Tt7U4x+dYNBLBZdcd6ZBQug+UYkHPBszmbhyTR9xv6+d4+8ZINsRhoCTXuYuyljuiukUegara8OS5kauAZadUbLeniUEqXal6GjbT//Gq/NidAlXE0U7G69aAlTC2l9PXUdvO1iOFGhkw2aGX5JEoFkRG+mCxqMRIRqDp6qYrvjgELbYabmRrk8zJ/+4ImNkyYoByvcKWP+ULoZlE/8iirZBSV+/z5BAXXaHkg4tmrY/rSejvuSeO122w3roAHPYFZeqhdLDrR0+HrVXtirLK03jU0SM1IOArB4oCOuGuPJndlt7lfVG2Toqvr9ScQ= - file: - - bin/fscrypt - - bin/pam_fscrypt.so - skip_cleanup: true - on: - repo: google/fscrypt - branch: master - tags: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d5be721..3e48137 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -55,9 +55,9 @@ use GitHub pull requests for this purpose. Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests. -On every pull request, [Travis CI](https://travis-ci.org/google/fscrypt) runs -unit tests, integration tests, code formatters, and linters. To pass these -checks you should make sure that in your submission: +On every pull request, [GitHub +Actions](https://github.com/google/fscrypt/actions) runs tests, code formatters, +and linters. To pass these checks you should make sure that in your submission: - `make` properly builds `fscrypt` and `pam_fscrypt.so`. - All tests, including [integration tests](#running-integration-tests) and [command-line interface (CLI) @@ -1,6 +1,6 @@ # fscrypt [](https://github.com/google/fscrypt/releases) -[](https://travis-ci.org/google/fscrypt) +[](https://github.com/google/fscrypt/actions?query=workflow%3ACI+branch%3Amaster) [](https://coveralls.io/github/google/fscrypt?branch=master) [](https://godoc.org/github.com/google/fscrypt) [](https://goreportcard.com/report/github.com/google/fscrypt) |