summaryrefslogtreecommitdiff
path: root/.github/workflows/main.yml
blob: 723319b968b1d08032985ef307d6ab1a456da9a9 (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: Build 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_generator: Ninja
          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 login https://${{ env.foo }} -u ${{ github.actor }} -p ${{ github.token }}
          docker pull ${{ env.foo }}/${{ env.platform.image }}:latest
          docker run ${{ env.foo }}/${{ matrix.platform.image }}:latest echo hi
        else
          mkdir build && cd build
          ../azure-pipelines/build.sh
          ../azure-pipelines/test.sh
        fi
      shell: bash