diff options
| author | Edward Thomson <ethomson@edwardthomson.com> | 2020-11-23 14:28:26 +0000 |
|---|---|---|
| committer | Edward Thomson <ethomson@edwardthomson.com> | 2020-11-23 23:08:23 +0000 |
| commit | 5a9d16dceb213af734697e7f552a5b79b6e46893 (patch) | |
| tree | 8cc15520756a8ba313572091c456f1b7f57bccc4 /.github/workflows | |
| parent | 9f8802d3eaa9dc915c6dc77c517952a49d566100 (diff) | |
| download | libgit2-5a9d16dceb213af734697e7f552a5b79b6e46893.tar.gz | |
ci: support multi-arch docker builds
Provide the base to our docker images and run with the QEMU docker
support optionally.
Diffstat (limited to '.github/workflows')
| -rw-r--r-- | .github/workflows/coverity.yml | 2 | ||||
| -rw-r--r-- | .github/workflows/main.yml | 77 |
2 files changed, 59 insertions, 20 deletions
diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index 99a4b151b..a29030cbc 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -20,7 +20,7 @@ jobs: with: fetch-depth: 0 - name: Download container - run: ci/getcontainer.sh ci/docker/xenial + run: ci/getcontainer.sh xenial env: DOCKER_REGISTRY: ${{ env.docker-registry }} GITHUB_TOKEN: ${{ secrets.github_token }} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 90fe4e0bb..091f51844 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,10 +26,22 @@ jobs: strategy: matrix: container: - - xenial - - bionic - - focal - - docurium + - name: xenial + - name: bionic + - name: focal + - name: docurium + - name: bionic-x86 + dockerfile: bionic + base: multiarch/ubuntu-core:x86-bionic + qemu: true + - name: bionic-arm32 + dockerfile: bionic + base: multiarch/ubuntu-core:armhf-bionic + qemu: true + - name: bionic-arm64 + dockerfile: bionic + base: multiarch/ubuntu-core:arm64-bionic + qemu: true runs-on: ubuntu-latest steps: - name: Check out repository @@ -37,15 +49,23 @@ jobs: with: fetch-depth: 0 if: github.event_name == 'push' + - name: Setup QEMU + run: docker run --rm --privileged multiarch/qemu-user-static:register --reset + if: matrix.container.qemu == true - name: Download existing container - run: ci/getcontainer.sh ${{ env.docker-config-path }}/${{ matrix.container }} + run: | + "${{ github.workspace }}/ci/getcontainer.sh" "${{ matrix.container.name }}" "${{ matrix.container.dockerfile }}" env: DOCKER_REGISTRY: ${{ env.docker-registry }} GITHUB_TOKEN: ${{ secrets.github_token }} + working-directory: ${{ env.docker-config-path }} if: github.event_name == 'push' - name: Build and publish image run: | - docker build -t ${{ env.docker-registry-container-sha }} --build-arg BASE=${{ matrix.container.base }} -f ${{ matrix.container }} . + if [ "${{ matrix.container.base }}" != "" ]; then + BASE_ARG="--build-arg BASE=${{ matrix.container.base }}" + fi + docker build -t ${{ env.docker-registry-container-sha }} ${BASE_ARG} -f ${{ env.dockerfile }} . docker push ${{ env.docker-registry-container-sha }} working-directory: ${{ env.docker-config-path }} if: github.event_name == 'push' && env.docker-container-exists != 'true' @@ -55,40 +75,45 @@ jobs: # or on the actual hosts (macOS, Windows). build: name: Build - needs: [build_containers] + needs: [ build_containers ] strategy: matrix: platform: - # Xenial, GCC, OpenSSL - image: xenial + container: + name: xenial env: CC: gcc CMAKE_GENERATOR: Ninja CMAKE_OPTIONS: -DUSE_HTTPS=OpenSSL -DREGEX_BACKEND=builtin -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON os: ubuntu-latest - # Xenial, GCC, mbedTLS - image: xenial + container: + name: xenial env: CC: gcc CMAKE_GENERATOR: Ninja CMAKE_OPTIONS: -DUSE_HTTPS=mbedTLS -DUSE_SHA1=HTTPS -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON os: ubuntu-latest - # Xenial, Clang, OpenSSL - image: xenial + container: + name: xenial env: CC: clang CMAKE_GENERATOR: Ninja CMAKE_OPTIONS: -DUSE_HTTPS=OpenSSL -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON os: ubuntu-latest - # Xenial, Clang, mbedTLS - image: xenial + container: + name: xenial env: CC: clang CMAKE_OPTIONS: -DUSE_HTTPS=mbedTLS -DUSE_SHA1=HTTPS -DREGEX_BACKEND=pcre -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON CMAKE_GENERATOR: Ninja os: ubuntu-latest - # Focal, Clang 10, mbedTLS, MemorySanitizer - image: focal + container: + name: focal env: CC: clang-10 CFLAGS: -fsanitize=memory -fsanitize-memory-track-origins=2 -fsanitize-blacklist=/home/libgit2/source/script/sanitizers.supp -fno-optimize-sibling-calls -fno-omit-frame-pointer @@ -99,7 +124,8 @@ jobs: ASAN_SYMBOLIZER_PATH: /usr/bin/llvm-symbolizer-10 os: ubuntu-latest - # Focal, Clang 10, OpenSSL, UndefinedBehaviorSanitizer - image: focal + container: + name: focal env: CC: clang-10 CFLAGS: -fsanitize=undefined,nullability -fno-sanitize-recover=undefined,nullability -fsanitize-blacklist=/home/libgit2/source/script/sanitizers.supp -fno-optimize-sibling-calls -fno-omit-frame-pointer @@ -110,7 +136,8 @@ jobs: ASAN_SYMBOLIZER_PATH: /usr/bin/llvm-symbolizer-10 os: ubuntu-latest - # Focal, Clang 10, OpenSSL, ThreadSanitizer - image: focal + container: + name: focal env: CC: clang-10 CFLAGS: -fsanitize=thread -fno-optimize-sibling-calls -fno-omit-frame-pointer @@ -181,21 +208,26 @@ jobs: run: ci/setup-${{ matrix.platform.setup-script }}.sh shell: bash if: matrix.platform.setup-script != '' + - name: Setup QEMU + run: docker run --rm --privileged multiarch/qemu-user-static:register --reset + if: matrix.platform.container.qemu == true - name: Download container - run: ci/getcontainer.sh ${{ env.docker-config-path }}/${{ matrix.platform.image }} + run: | + "${{ github.workspace }}/ci/getcontainer.sh" "${{ matrix.platform.container.name }}" "${{ matrix.platform.container.dockerfile }}" env: DOCKER_REGISTRY: ${{ env.docker-registry }} GITHUB_TOKEN: ${{ secrets.github_token }} - if: matrix.platform.image != '' + working-directory: ${{ env.docker-config-path }} + if: matrix.platform.container.name != '' - name: Create container - run: docker build -t ${{ env.docker-registry-container-sha }} -f ${{ matrix.platform.image }} . + run: docker build -t ${{ env.docker-registry-container-sha }} -f ${{ env.dockerfile }} . working-directory: ${{ env.docker-config-path }} - if: matrix.platform.image != '' && env.docker-container-exists != 'true' + if: matrix.platform.container.name != '' && env.docker-container-exists != 'true' - name: Build and test run: | export GITTEST_NEGOTIATE_PASSWORD="${{ secrets.GITTEST_NEGOTIATE_PASSWORD }}" - if [ -n "${{ matrix.platform.image }}" ]; then + if [ -n "${{ matrix.platform.container.name }}" ]; then docker run \ --rm \ -v "$(pwd):/home/libgit2/source" \ @@ -229,6 +261,13 @@ jobs: needs: [build_containers] runs-on: ubuntu-latest steps: + - name: Setup defaults + run: | + if [ "${{ matrix.container.dockerfile }}" = "" ]; then + echo "dockerfile=${{ matrix.container.dockerfile }}" >> $GITHUB_ENV + else + echo "dockerfile=${{ matrix.container.dockerfile }}" >> $GITHUB_ENV + fi - name: Check out repository uses: actions/checkout@v2 with: |
