summaryrefslogtreecommitdiff
path: root/.github/workflows/tests.yml
blob: 436dfbe9d403467baff6d5a163546a6d46831eba (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
---
name: Tests
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  tests:
    # Distro configuration matrix
    #
    # Each build is run in a Docker container specific to the distro.
    # When adding a new distro, handle the dependency installation in
    # `ci/gh-install.sh`. The matrix configuration options are:
    #
    # name: A friendly name to use for the job.
    #
    # image: The Docker image to use.
    #
    # pre-checkout-setup: Commands to run before the git repo checkout.
    #   If git is not in the Docker image, it must be installed here.
    #   Otherwise, the checkout action uses the GitHub REST API, which
    #   doesn't result in an actual git repo. A real git repo is
    #   required to checkout the submodules.
    #
    # extra-packages: Packages to install in addition to those in
    #   `ci/gh-install.sh`. This can be used to support features from
    #   additional `configure` options.
    #
    # configure-options: Options to pass to `configure`.
    strategy:
      matrix:
        include:
          - name: Debian Buster (10) with sign-ed25519
            image: debian:buster-slim
            pre-checkout-setup: |
              apt-get update
              apt-get install -y git
            extra-packages: >-
              libsodium-dev
            configure-options: >-
              --with-ed25519-libsodium

          - name: Debian Buster (10) with curl, sign-ed25519 and no gpgme
            image: debian:buster-slim
            pre-checkout-setup: |
              apt-get update
              apt-get install -y git
            extra-packages: >-
              libsodium-dev
            configure-options: >-
              --with-curl
              --with-ed25519-libsodium
              --without-gpgme

          # A 32 bit build to act as a proxy for frequently deployed 32
          # bit armv7
          - name: Debian Buster (10) 32 bit
            image: i386/debian:buster-slim
            # This is pretty nasty. The checkout action uses an x86_64
            # node binary in the container, so we need to provide an
            # x86_64 ld.so and libstdc++.
            pre-checkout-setup: |
              dpkg --add-architecture amd64
              apt-get update
              apt-get install -y git libc6:amd64 libstdc++6:amd64

          - name: Ubuntu Focal (20.04)
            image: ubuntu:focal
            pre-checkout-setup: |
              apt-get update
              apt-get install -y git

          - name: Ubuntu Groovy (20.10)
            image: ubuntu:groovy
            pre-checkout-setup: |
              apt-get update
              apt-get install -y git

    name: ${{ matrix.name }}
    runs-on: ubuntu-latest
    container:
      image: ${{ matrix.image }}

    steps:
      - name: Pre-checkout setup
        run: ${{ matrix.pre-checkout-setup }}
        if: ${{ matrix.pre-checkout-setup }}

      - name: Checkout repository
        uses: actions/checkout@v2
        with:
          submodules: true

      - name: Install dependencies
        run: ./ci/gh-install.sh ${{ matrix.extra-packages }}

      - name: Build and test
        run: ./ci/gh-build.sh ${{ matrix.configure-options }}
        env:
          # GitHub hosted runners currently have 2 CPUs, so run 2
          # parallel make jobs.
          #
          # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners
          MAKEFLAGS: -j2