summaryrefslogtreecommitdiff
path: root/.github/workflows/main.yml
blob: 26d2a7e560fad1527c81c6560d0a2484591be59a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
name: Containerization

on:
  push:
    branches: [ master, maint/* ]
  pull_request:
    branches: [ master, maint/* ]

env:
  foo: docker.pkg.github.com

jobs:
  # Build the docker container images that we will use for our Linux builds.  This will
  # identify the last commit to the repository that updated the docker images, and try
  # to download the image tagged with that sha.  If it does not exist, we'll do a docker
  # build and push the image up to GitHub Packages for the actual CI/CD runs.  We tag
  # with both the sha and "latest" so that the subsequent runs need not know the sha.
#  build_containers:
#    strategy:
#      matrix:
#        container:
#        - { name: xenial, base: 'ubuntu:xenial' }
#        - { name: bionic, base: 'ubuntu:bionic' }
#    env:
#      docker-config-path: azure-pipelines/docker
#      docker-registry: docker.pkg.github.com
#    name: Create docker image
#    runs-on: ubuntu-latest    
#    steps:
#    - name: Check out repository
#      uses: actions/checkout@v2
#      with:
#        fetch-depth: 0
#    - name: Calculate image label
#      run: |
#        echo "::set-env name=docker-container::${{ github.repository }}/${{ matrix.container.name }}"
#        echo "::set-env name=docker-sha-tag::test4-$(git log -1 --pretty=format:"%h" -- ${{ env.docker-config-path }})"
#    - name: Download existing image
#      run: |
#        docker login https://${{ env.docker-registry }} -u ${{ github.actor }} -p ${{ github.token }}
#
#        echo "::set-env name=docker-container-exists::true"
#        docker pull ${{ env.docker-registry }}/${{ env.docker-container }}:${{ env.docker-sha-tag }} || echo "::set-env name=docker-container-exists::false"
#    - name: Build and publish image
#      run: |
#        docker build -t ${{ env.docker-registry }}/${{ env.docker-container }}:${{ env.docker-sha-tag }} --build-arg BASE=${{ matrix.container.base }} -f ${{ matrix.container.name }} .
#        docker tag ${{ env.docker-registry }}/${{ env.docker-container }}:${{ env.docker-sha-tag }} ${{ env.docker-registry }}/${{ env.docker-container }}:latest
#        docker push ${{ env.docker-registry }}/${{ env.docker-container }}:${{ env.docker-sha-tag }}
#        docker push ${{ env.docker-registry }}/${{ env.docker-container }}:latest
#      working-directory: ${{ env.docker-config-path }}
#      if: env.docker-container-exists != 'true'

  # Run our CI/CD builds.
  build:
#    needs: [build_containers]
    strategy:
      matrix:
        platform:
        -
          os: ubuntu-latest
          image: xenial
          cc: gcc
          cmake_generator: Ninja
          cmake_options: -DUSE_HTTPS=OpenSSL -DREGEX_BACKEND=builtin -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=valgrind -DUSE_GSSAPI=ON
        - # macOS
          os: macos-latest
          pkg_config_path: /usr/local/opt/openssl/lib/pkgconfig
          cmake_options: -DREGEX_BACKEND=regcomp_l -DDEPRECATE_HARD=ON -DUSE_LEAK_CHECKER=leaks -DUSE_GSSAPI=ON
          skip_ssh_tests: true
        - # Windows Visual Studio amd64
          os: windows-latest
          cmake_generator: Visual Studio 16 2019
          cmake_options: -A Win32 -DMSVC_CRTDBG=ON -DDEPRECATE_HARD=ON -DUSE_SHA1=HTTPS
          skip_ssh_tests: true
          skip_negotiate_tests: true
        - # Windows Visual Studio amd64
          os: windows-latest
          cmake_generator: Visual Studio 16 2019
          cmake_options: -A x64 -DMSVC_CRTDBG=ON -DDEPRECATE_HARD=ON
          skip_ssh_tests: true
          skip_negotiate_tests: true
      fail-fast: false
    # Turn matrix variables into environment variables.
    env:
      CC: ${{ matrix.platform.cc }}
      CMAKE_GENERATOR: ${{ matrix.platform.cmake_generator }}
      CMAKE_OPTIONS: ${{ matrix.platform.cmake_options }}
      PKG_CONFIG_PATH: ${{ matrix.platform.pkg_config_path }}
      SKIP_SSH_TESTS: ${{ matrix.platform.skip_ssh_tests }}
      SKIP_NEGOTIATE_TESTS: ${{ matrix.platform.skip_negotiate_tests }}
    name: Build
    runs-on: ${{ matrix.platform.os }}
    steps:
    - name: Check out repository
      uses: actions/checkout@v2
    - run: |
        env
    - run: echo ${{ matrix.platform.os }} ${{matrix.platform.image}}
    - name: Build and test
      run: |
        if [ -n "${{ matrix.platform.image }}" ]; then
          docker_container="${{ github.repository }}/${{ matrix.platform.image }}:latest"
          docker login https://${{ env.foo }} -u ${{ github.actor }} -p ${{ github.token }}
          docker pull ${{ env.foo }}/${docker_container}
          docker run -v /tmp/__home__:/home/libgit2 -v $(pwd):/home/libgit2/source -w /home/libgit2/source -e CC -e CMAKE_GENERATOR -e CMAKE_OPTIONS -e PKG_CONFIG_PATH -e SKIP_SSH_TESTS -e SKIP_NEGOTIATE_TESTS ${{ env.foo }}/${docker_container} /bin/bash -c "pwd && ls -Flas && mkdir build && cd build && ../azure-pipelines/build.sh && ../azure-pipelines/test.sh"
        else
          mkdir build && cd build
          ../azure-pipelines/build.sh
          ../azure-pipelines/test.sh
        fi
      shell: bash