Skip to content

Stress

Stress #39

Workflow file for this run

name: Stress
# The bulk issuance stress test is separated from CI because it is slow
# relative to the rest of the suite and its value is in repetition: a
# sequencing race that survives one run may not survive fifty. So it runs
# nightly and on demand rather than on every push, and CI stays fast.
#
# It still runs on pull requests that touch the issuance path, since that
# is where a regression it could catch would come from.
on:
schedule:
# 04:17 UTC daily. Off the hour to avoid the scheduling stampede.
- cron: '17 4 * * *'
workflow_dispatch:
inputs:
certs:
description: 'Number of certificates to issue'
required: false
default: '800'
concurrency:
description: 'Certificates in flight'
required: false
default: '64'
pull_request:
paths:
- 'log/**'
- 'ca/**'
- 'acme/**'
- 'cert/**'
- 'tlogx/**'
- 'integration/stress_test.go'
- '.github/workflows/stress.yml'
permissions:
contents: read
# See .github/workflows/ci.yml for why this pins a 1.27 release
# candidate. Keep GO_VERSION in sync with that workflow.
env:
GO_VERSION: '1.27.0-rc.2'
GOTOOLCHAIN: local
jobs:
stress:
runs-on: ubuntu-latest
# Generous: the default 800-cert run takes seconds, but a
# workflow_dispatch soak can be given a much larger size.
timeout-minutes: 60
steps:
- uses: actions/checkout@v7
# setup-go caches the module and build caches itself, keyed on
# go.sum, so no separate actions/cache step is needed.
- name: Install Go
uses: actions/setup-go@v7
with:
go-version: ${{ env.GO_VERSION }}
- name: Toolchain version
run: go version
# `make stress` runs under -race, which is the point: the
# assertions this test makes about index assignment are exactly the
# kind of thing the race detector corroborates.
#
# A manual run can override the size; the scheduled and
# pull_request runs take the test's own defaults (800 / 64).
- name: Bulk issuance stress test (race)
env:
CACTUS_STRESS_CERTS: ${{ inputs.certs }}
CACTUS_STRESS_CONCURRENCY: ${{ inputs.concurrency }}
run: make GO=go stress