- Go 1.24+ (see
go.modfor exact version) - golangci-lint v1.64+
- pulumictl (for copyright checks)
make build # Build the esc binary
make test # Run tests (-short, parallel)
make test_cover # Run full tests with race detection and coverage
make lint # Run all linters
make format # Format all Go files
make verify # Format + lint + test (pre-commit check)- Create a branch from
main. - Make your changes. Keep PRs focused — one concern per PR.
- Run
make verifyand fix any failures. - Add a changelog entry to
CHANGELOG_PENDING.mdif the change is user-facing. - Open a PR. Fill in all sections of the PR template.
- Include evidence of test execution in the PR body.
- Tests use
testdata/directories for snapshot files and fixtures. - If your change alters output, update snapshot files with
PULUMI_ACCEPT=true make testand carefully review the diff. - Use
go test -run TestName ./path/to/package/to run a single test.
We use goreleaser for automating releases. To cut a new release, create a commit that:
- Copy the entries in CHANGELOG_PENDING into CHANGELOG. CHANGELOG_PENDING is used to generate the release notes. After releasing, the following commit can clear the changes from pending.
- Bumps the version in the .version file, which is used to stamp the version into the binary.
- Tag the commit with a version tag in the format vX.X.X, to trigger the release automation.