Repository navigation
Releases
Releases · preloopdev/loopt
v0.1.4
Reusable workflows are now checked and locked.
Reusable workflow calls are checked against their workflow (#6)
loopt lint compares every jobs.<id>.uses: call with the called workflow's on.workflow_call declaration:
preloop/reusable-unknown-input,preloop/reusable-missing-input,preloop/reusable-input-type: undeclared inputs, missing required inputs, and literal values of the wrong typepreloop/reusable-unknown-secret,preloop/reusable-missing-secret: secrets that don't match the declaration (skipped forsecrets: inherit)preloop/reusable-unknown-output:needs.<call>.outputs.<name>that the called workflow doesn't declarepreloop/reusable-not-callable,preloop/reusable-callee-missing: local workflows without aworkflow_calltrigger, or missing files
Local workflows (./ and $/) are read from the repo. Remote workflows are fetched at their ref with loopt lint --online; without it, they're skipped.
loopt lock pins reusable workflows (#7)
- Reusable calls are pinned to a full commit SHA with
owner_id/repo_id. The actions inside each called workflow, and any reusable workflows it calls, are pinned too. - The pins live in
.github/workflows/reusable.lock. GitHub'sactions.lockformat can't record reusable workflows, so this keepsactions.lockvalid forgh actions-lockand the hosted runner. loopt lock --verifydetects moved refs.--verify-localrequires an entry for every remote call; runloopt lockonce after upgrading.- Also reads
v0.0.3actions.lockfiles written by currentgh actions-lock.
v0.1.3
loopt lint now catches the mistakes that previously only surfaced after a push, and can verify your pinned actions against GitHub.
Correctness checks
Triggers (#1)
preloop/unknown-event,preloop/unknown-activity-type: misspelled events andtypes:values (pull_request: types: [opend])preloop/invalid-event-filter: filters on events that ignore them;brancheswithbranches-ignoreon the same eventpreloop/invalid-glob: malformed branch, tag and path filterspreloop/invalid-cron,preloop/cron-too-frequent: schedules GitHub rejects or throttlespreloop/invalid-dispatch-input: badworkflow_dispatch/workflow_callinputs, outputs and secrets
Expression references (#2)
preloop/undefined-step-reference,preloop/undefined-needs-reference,preloop/undefined-matrix-key,preloop/undefined-input: typo'dsteps.*,needs.*.outputs.*,matrix.*andinputs.*preloop/unavailable-context: contexts used where GitHub doesn't provide them (for examplesecretsin a jobif:)preloop/unknown-context-property: unknowngithub.*,runner.*,job.*andstrategy.*properties
Jobs and steps (#3)
preloop/unknown-key: keys GitHub ignores, with a "did you mean" hint (runs_on→runs-on)preloop/unknown-runner-label:runs-onlabels that match no GitHub-hosted runner (unless you pass a runner inventory with--context)preloop/floating-runner-image(info):*-latestimages that move between OS versionspreloop/invalid-shell,preloop/invalid-permission,preloop/invalid-id,preloop/invalid-env-namepreloop/deprecated-command:::set-output,::save-state,::set-env,::add-pathpreloop/constant-condition:if:conditions that are always true or always false
Security
dangerous-checkout:actions/checkoutwithallow-unsafe-pr-checkoutenabled (#5)loopt lint --onlinechecks everyuses:against GitHub throughgh:impostor-commit,ref-confusion,known-vulnerable-actions,archived-uses,ref-version-mismatchandstale-action-refs. Without--online, these report as unavailable, as before. (#5)
CI
- CI now runs the vendored crates' unit tests (#4).
v0.1.2
v0.1.1
v0.1.0
Full Changelog: https://github.com/preloopdev/loopt/commits/v0.1.0