aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/ci.yml83
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'