File: letsencrypt-boulder-boulder-ci.yml

package info (click to toggle)
rust-github-actions-models 0.39.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 544 kB
  • sloc: makefile: 4
file content (171 lines) | stat: -rw-r--r-- 5,929 bytes parent folder | download
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# https://github.com/letsencrypt/boulder/blob/e182d889b220421caefbf384b36467f771b5f8d3/.github/workflows/boulder-ci.yml
# Boulder CI test suite workflow

# Copyright: 2014-2024 The Boulder Developers
#
# Licensed under the Mozilla Public License 2.0
#
# https://github.com/letsencrypt/boulder/blob/main/LICENSE.txt
#

name: Boulder CI

# Controls when the action will run.
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches:
      - main
      - release-branch-*
  pull_request:
    branches:
      - "**"

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
permissions:
  contents: read

jobs:
  #  Main test jobs. This looks like a single job, but the matrix
  #  items will multiply it. For example every entry in the
  #  BOULDER_TOOLS_TAG list will run with every test. If there were two
  #  tags and 5 tests there would be 10 jobs run.
  b:
    # The type of runner that the job will run on
    runs-on: ubuntu-20.04

    strategy:
      # When set to true, GitHub cancels all in-progress jobs if any matrix job fails. Default: true
      fail-fast: false
      # Test matrix.
      matrix:
        # Add additional docker image tags here and all tests will be run with the additional image.
        BOULDER_TOOLS_TAG:
          - go1.23.1_2024-09-05
        # Tests command definitions. Use the entire "docker compose" command you want to run.
        tests:
          # Run ./test.sh --help for a description of each of the flags.
          - "./t.sh --lints --generate"
          - "./t.sh --integration"
          # Testing Config Changes:
          # Config changes that have landed in main but not yet been applied to
          # production can be made in `test/config-next/<component>.json`.
          #
          # Testing DB Schema Changes:
          # Database migrations in `sa/_db-next/migrations` are only performed
          # when `docker compose` is called using `-f docker-compose.yml -f
          # docker-compose.next.yml`.
          - "./tn.sh --integration"
          - "./t.sh --unit --enable-race-detection"
          - "./tn.sh --unit --enable-race-detection"
          - "./t.sh --start-py"

    env:
      # This sets the docker image tag for the boulder-tools repository to
      # use in tests. It will be set appropriately for each tag in the list
      # defined in the matrix.
      BOULDER_TOOLS_TAG: ${{ matrix.BOULDER_TOOLS_TAG }}

    # Sequence of tasks that will be executed as part of the job.
    steps:
      # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Docker Login
        # You may pin to the exact commit or the version.
        # uses: docker/login-action@f3364599c6aa293cdc2b8391b1b56d0c30e45c8a
        uses: docker/login-action@v3.3.0
        with:
          # Username used to log against the Docker registry
          username: ${{ secrets.DOCKER_USERNAME}}
          # Password or personal access token used to log against the Docker registry
          password: ${{ secrets.DOCKER_PASSWORD}}
          # Log out from the Docker registry at the end of a job
          logout: true
        continue-on-error: true

      # Print the env variable being used to pull the docker image. For
      # informational use.
      - name: Print BOULDER_TOOLS_TAG
        run: echo "Using BOULDER_TOOLS_TAG ${BOULDER_TOOLS_TAG}"

      # Pre-pull the docker containers before running the tests.
      - name: docker compose pull
        run: docker compose pull

      # Run the test matrix. This will run
      - name: "Run Test: ${{ matrix.tests }}"
        run: ${{ matrix.tests }}

  govulncheck:
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false

    steps:
      # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Setup Go
        uses: actions/setup-go@v5
        with:
          # When Go produces a security release, we want govulncheck to run
          # against the most recently released Go version.
          check-latest: true
          go-version: "stable"

      - name: Run govulncheck
        run: go run golang.org/x/vuln/cmd/govulncheck@latest ./...

  vendorcheck:
    runs-on: ubuntu-20.04
    strategy:
      # When set to true, GitHub cancels all in-progress jobs if any matrix job fails. Default: true
      fail-fast: false
      matrix:
        go-version: ["1.22.5"]

    steps:
      # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v4
        with:
          persist-credentials: false

      - name: Setup Go ${{ matrix.go-version }}
        uses: actions/setup-go@v5
        with:
          go-version: ${{ matrix.go-version }}

      - name: Verify vendor
        shell: bash
        run: |
          go mod tidy
          go mod vendor
          git diff --exit-code

  # This is a utility build job to detect if the status of any of the
  # above jobs have failed and fail if so. It is needed so there can be
  # one static job name that can be used to determine success of the job
  # in GitHub branch protection.
  # It does not block on the result of govulncheck so that a new vulnerability
  # disclosure does not prevent any other PRs from being merged.
  boulder_ci_test_matrix_status:
    permissions:
      contents: none
    if: ${{ always() }}
    runs-on: ubuntu-latest
    name: Boulder CI Test Matrix
    needs:
      - b
      - vendorcheck
    steps:
      - name: Check boulder ci test matrix status
        if: ${{ needs.b.result != 'success' || needs.vendorcheck.result != 'success' }}
        run: exit 1