diff options
Diffstat (limited to '.github/workflows')
-rw-r--r-- | .github/workflows/ci.yml | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ed93b52 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,83 @@ +name: CI + +on: + push: + pull_request: + workflow_dispatch: + +jobs: + lint: + runs-on: ubuntu-latest + name: Linting + continue-on-error: ${{ github.ref != 'refs/heads/master' }} + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Run clang-format + uses: egor-tensin/clang-format@v1 + + build: + strategy: + matrix: + compiler: [gcc, clang] + configuration: [Debug, Release] + runs-on: ubuntu-latest + name: 'Build: ${{ matrix.compiler }} / ${{ matrix.configuration }}' + env: + COMPILER: '${{ matrix.compiler }}' + CONFIGURATION: '${{ matrix.configuration }}' + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Install dependencies + run: | + sudo apt-get update + sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends libgit2-dev libsqlite3-dev python3-pytest valgrind + - name: Build + run: make install + - name: Upload binaries + uses: actions/upload-artifact@v3 + with: + name: 'cimple-${{ matrix.compiler }}-${{ matrix.configuration }}' + path: './build/install/' + if-no-files-found: error + - name: Run tests + run: make test + - name: Run Valgrind tests + run: make test/valgrind + continue-on-error: true + + publish: + needs: [lint, build] + runs-on: ubuntu-latest + name: 'Docker: publish' + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: '${{ secrets.DOCKERHUB_USERNAME }}' + password: '${{ secrets.DOCKERHUB_TOKEN }}' + - id: platforms + name: Which platforms? + # Building for ARM for every commit not in master is too time-consuming. + run: | + if [ '${{ github.ref }}' = 'refs/heads/master' ]; then + echo 'platforms=amd64,armhf,arm64' >> "$GITHUB_OUTPUT" + else + echo 'platforms=amd64' >> "$GITHUB_OUTPUT" + fi + - name: Publish + uses: docker/build-push-action@v3 + with: + # Without context, .dockerignore is not respected? + # https://stackoverflow.com/a/74552407/514684 + context: . + platforms: '${{ steps.platforms.outputs.platforms }}' + push: ${{ github.ref == 'refs/heads/master' }} + tags: '${{ secrets.DOCKERHUB_USERNAME }}/cimple:latest' |