Thanks for considering contributing to this project! We are really glad you are reading this, because we need volunteer developers to help this project come to fruition.
Please note we have a code of conduct, please follow it in all your interactions with the project.
If you find any bugs, please file an issue in the GitHub issues page. Please fill out the provided template with the appropriate information.
If you are taking the time to mention a problem, even a seemingly minor one, it is greatly appreciated, and a totally valid contribution to this project. Thank you!
This repository is a code generator, and most of what it commits is its own
output. Blueprints, probe recordings, OpenAPI snapshots and the pilot
provider under pilot/ are all generated. To change any of them, change the
input — the blueprint, a template, the generator, or the recorded probe — and
re-run the relevant command.
Stale generated code compiles perfectly well, so drift would otherwise be invisible. CI therefore regenerates everything, fails if the result differs from what was committed, and then builds and tests the output as well, because a generator change can produce a clean diff and broken code.
Every generated file carries this header, and it is the authoritative signal:
// Code generated by tfpfgen from blueprints/<path>
// (sha256:…). DO NOT EDIT.A small number of files are scaffolded once and then owned by you — those carry no such header, and the generator will not touch them again. The generated boundary documentation is the full list.
Three consequences worth knowing before opening a pull request:
- Generated output must be deterministic. No timestamps, no tool version, no absolute paths, and no reliance on Go map iteration order in anything written to disk. A single such value makes the drift check fail on a run that changed nothing, which destroys its usefulness.
- Never commit a real credential to a recording. Cassettes are committed
by design. Redaction allowlists header values rather than denylisting them, and
a final pass fails the recording outright — exit
7, nothing written — if any credential-shaped value survives into the output. There is nothing extra to run before pushing; the check is part of every record run, andprobe verifyre-derives committed recordings offline. - Regenerate with the postcheck on.
provider generatefinishes by compiling the output, regenerating its registry docs and runningterraform fmt(-skip-postcheckexists for tight inner loops only). A PR that arrives with staledocs/or unformatted fixtures is a PR whose finalprovider generatewas skipped — CI will say so, one check later.