Releases: Azure/azure-verified-modules-tools
Release list
Avm.Authoring 0.1.7
Second remediation round from end-to-end testing released 0.1.6 against the
canary repo Azure/terraform-azurerm-avm-ptn-example-repo (F23–F48).
Two numbering sequences collided during review, so the F tags below are
branch-local. Where a reviewer used the same number for a different defect, the
mapping is:
| Reviewer ID | Tag used here | Defect |
|---|---|---|
| F39 | F41 | Three unanchored ::error:: annotations per failure, worst-first |
| F40 | F42 | format and docs auto-fix the CI working copy and report pass |
Both are fixed in this release. The F39 and F40 tags below refer to the
shell-hook guard and the empty-tier status respectively.
Breaking
-
avm pr-checknow fails on formatting and documentation drift.format
anddocspreviously rewrote your files in the CI working copy and reported
pass, so the fix was thrown away with the runner and the defect merged. Both
steps now check rather than fix, and reportfailwith one issue per file. A
repository with unformatted sources or a staleREADME.mdthat passed on
0.1.6will fail on0.1.7. Action required: runavm pre-commit
locally and commit the result.pre-commitstill auto-fixes — onlypr-check
gates. (F42) -
The end-to-end check name has changed. Fanning e2e out across a per-example
matrix renames the check fromEnd-to-end teststo
End-to-end tests (<example>), one per example. A branch protection rule that
requires the old literal name will not error — it will simply never be
satisfied, and pull requests will wait on a check that no longer reports.
Action required: in Settings → Branches → your protection rule, remove the
required checkEnd-to-end testsand add eachEnd-to-end tests (<example>)
entry that now appears. Do this in the same change that picks up0.1.7. -
avmno longer writes result objects to the success stream. Anything that
captured a command's output as an object needs--passthruto get it back.
(F23) -
avm test e2e --example <name>treats an unknown name, or one carrying a
.e2eignoremarker, as a hard error rather than a silent skip. This is
deliberate — it is what stops a typo in a CI matrix from quietly passing — but
a matrix generated by hand rather than by--listmay now fail. -
The round-robin subscription fan-out reads
TEST_SUBSCRIPTION_IDS. Repos
configured with onlyARM_SUBSCRIPTION_IDstill work through the preserved
fallback path, but every parallel matrix leg then deploys into the same
subscription and may hit quota where a sequential run did not. -
avm pr-checknow runs the unit test tier, and itsteststep is renamed
tovalidate. The step calledtestnever ran a test: it routes to
terraform validate/bicep build, reportsFilesProcessedand carries no
run counts, so a module whose tests were broken — or entirely absent — still
produced an all-green gauntlet in a few seconds. The step is now named for
what it does, and a realunit teststep runs after it.Two consequences.
pr-checkgets slower by the cost of your unit tier
(~20s on a typical module). And it can newly fail: if your unit tests were
never actually running locally, this is the run that tells you. Both are the
point —pr-checkdocuments itself as running every check that runs in CI,
and that claim was not true while the unit tier was absent. Only the unit
tier is included, because it is the one tier that is credential-free by
design;integrationande2eneed a live subscription and stay out.
avm pre-commitis unchanged and still offline. (F38) -
A repo misconfiguration now fails the gauntlet instead of skipping it.
avm pr-checkandavm pre-commitmapped everyAvmConfigurationException
toskipped, which does not flip the overall status. That type is thrown
both for "this verb does not apply to this ecosystem" and for real
misconfigurations — an unresolvable tflint or mapotf config bundle, an
unresolvable managed-files repo id, an invalid.avmcontext override,
AVM_OFFLINE=1, an invalidAVM_MIRROR, an unknown or.e2eignored e2e
example. Any of those inside a gauntlet step rendered as a benign green run.
Ecosystem gates now throw the newAvmNotSupportedException(which derives
fromAvmConfigurationException, so nothing else changes), and only that
type still skips. Action required: none, unless one of your repos was
quietly misconfigured — in which case the gauntlet will now say so. The step
fails rather than errors, so the chain still runs to the end and reports
every problem instead of stopping at the first. (F39) -
A test tier with no test files now reports
skipped, notpass.
avm test unit,avm test integrationandavm test e2ereturned
Status: passwithFilesProcessed = 0when the module shipped no
tests/<tier>/*.tftest.hcl(or no runnableexamples/). Once F38 put the
unit tier insidepr-check, that rendered asunit test -> passfor a module
with no tests at all — indistinguishable from a real pass, and exactly the
vacuous-green failure mode the F33 run counts exist to prevent, one level up.
skippeddoes not flip the overall status and the CLI still exits0, so a
module with no tier is reported rather than broken. Action required: none,
unless you parseStatusfrom these verbs — an absent tier now yields
skipped. A tier whose files exist but execute norunblocks still reports
pass;RunsTotal = 0is the signal there. (F40)
Upgrade notes
tflint --initneeds an authenticated token outside the reusable workflow.
TFLint resolves its ruleset plugins through the GitHub releases API, which
allows 60 unauthenticated requests per hour per source IP. Hosted runners
share an egress IP, so a busy period surfaces as an intermittent, platform-
correlated lint failure that looks like a flake rather than a rate limit.
.github/workflows/terraform-module.ymland this repo's own CI now both set
GITHUB_TOKENfor the 5,000/hour authenticated budget, and a workflow-contract
test keeps the two from drifting apart again. If you self-host runners, or call
tflintoutside the reusable workflow, setGITHUB_TOKENin that environment
too.
Added
avm test e2e --example <name>targets a single example. It accepts either
the folder leaf (example-a) or a repo-relative path (examples/example-a)
and may be repeated. Omitting it keeps the existing behaviour of running every
runnable example sequentially. A name that does not exist, or that carries a
.e2eignoremarker, is a hard error listing the valid names rather than a
silent pass, so a typo in a CI matrix cannot skip a real test. (F26)avm test e2e --listemits a compact JSON array of runnable example names and
nothing else, so a workflow can build a matrix withfromJson()and no
post-processing. A module with no runnable examples emits[]. (F27)- The Terraform reusable workflow fans end-to-end tests out across a per-example
matrix withfail-fast: false, restoring the governance round-robin
subscription fan-out so parallel legs do not collide on quota. The matrix is
skipped cleanly when a module has no runnable examples. - Every step and sub-step now carries
StartTime,EndTimeand a duration, both
on the result objects and in the rendered output. (F29) RUNNER_DEBUG=1(set when a workflow is re-run with debug logging) turns
verbose on, and verbose now cascades from the entry point to engines,
sub-cmdlets andInvoke-AvmProcess.AVM_VERBOSE=1does the same outside
GitHub Actions. (F30)avm test unitandavm test integrationreportRunsTotal,RunsPassedand
RunsFailedalongsideFilesProcessed, and render the tally. A file count is a
poor coverage signal; a run count exposes an empty suite immediately. (F33)
Changed
- All module output routes through a single writer with levels, which is GitHub
Actions aware (::group::,::error::,::warning::,::debug::) instead of
mixingWrite-Host,Write-InformationandWrite-Verbose. (F31) - Subprocess output is quiet by default and replayed in full at the point of
failure. Verbose or debug streams it live; GitHub Actions wraps it in a
collapsed::group::so the log is present but not noisy. Long-running
sub-steps emit a periodic elapsed-time heartbeat so a slow deploy is
distinguishable from a hang. (F28) avmrenders one summary per invocation instead of one per emitted result
object, and labels per-item rows with the item's own identity, so
avm tool listno longer reads as six conflicting statuses for one command.
(F25)avmno longer writes result objects to the success stream by default; pass
--passthruto get them back for scripting. (F23)- Both test tiers now invoke
terraform testidentically and render a progress
line per test run with its duration, instead of the unit tier running silently
and the integration tier dumping raw-jsonNDJSON on the human channel. The
terraform initsub-step follows the same quiet-by-default rule as everything
else. (F33) - Caller-rendered progress is no longer collapsed behind a GitHub Actions
::group::. Grouping exists to fold away raw child output, and a sub-step that
supplies its own line renderer emits no raw output, so the fold hid exactly the
curated per-run progress it was meant to reveal. (F33)
Fixed
- The release workflow no longer fails at the point of publishing. The
build
task stamps the tag's whole CHANGELOG section into the staged manifest's
ReleaseNotes, and the PowerShell Gallery rejects any package whose
ReleaseNotesexceeds 10600 characters — 0.1.7's section is 23987, so the
first attempt was rejected with400 (The package is invalid)after the tag
and the GitHub Release already existed.Get-AvmReleaseNotes.ps1gained
`-...
v0.1.6
What's Changed
- fix: remediate Avm.Authoring F19-F22 by @jaredfholgate in #16
Full Changelog: v0.1.5...v0.1.6
v0.1.5
What's Changed
- fix: remediate the 18 Avm.Authoring 0.1.4 end-to-end findings (F01-F18) by @jaredfholgate in #15
Full Changelog: v0.1.4...v0.1.5
v0.1.4
What's Changed
- fix(managed-files): match governance overlay + gitkeep semantics by @jaredfholgate in #13
Full Changelog: v0.1.3...v0.1.4
v0.1.3
What's Changed
- ci(release): derive the module version from the release tag by @jaredfholgate in #12
Full Changelog: v0.1.2...v0.1.3
v0.1.2
What's Changed
- feat: Terraform test tiers (unit/integration/e2e) + managed-files sync by @jaredfholgate in #10
Full Changelog: v0.1.1...v0.1.2
v0.1.1
What's Changed
- ci: idempotent release workflow + polished display names + improved gallery description by @jaredfholgate in #9
Full Changelog: v0.1.0...v0.1.1
v0.1.0
What's Changed
- Adding Microsoft SECURITY.MD by @microsoft-github-policy-service[bot] in #4
- Avm.Authoring: initial release — Terraform pre-commit tool chain by @jaredfholgate in #1
- ci: run ci + integration-terraform on PR/dispatch only, in the avm environment by @jaredfholgate in #8
New Contributors
- @microsoft-github-policy-service[bot] made their first contribution in #4
- @jaredfholgate made their first contribution in #1
Full Changelog: https://github.com/Azure/azure-verified-modules-tools/commits/v0.1.0