Commit graph

9 commits

Author SHA1 Message Date
Leon Mika 03da0c3e85 Add optional s3-acl input for canned ACLs on uploads
Lets the workflow set, e.g., public-read on the uploaded object so the
HTTPS URL is actually downloadable without further configuration. Empty
default means no ACL is sent — required for modern AWS buckets with
Object Ownership = "Bucket owner enforced" that reject any ACL.

Validates the value against the AWS canned-ACL list at config time so
typos fail before the upload runs. Wires the input through action.yml,
config, and the orchestrator; adds a unit test that the ACL is forwarded
to PutObjectInput when set and omitted when empty.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 13:59:49 +10:00
Leon Mika 78f63e640f Print public HTTPS URL of uploaded artefact
After a successful S3 upload, log the HTTPS URL so the workflow run
output shows where the artefact was published. Uses the regional
virtual-hosted form for AWS S3 and path-style for custom endpoints,
matching how NewClient configures the client.

The URL is what the object would be served at if the bucket allows
public reads — the orchestrator does not assert anything about the
bucket's access policy.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 13:54:57 +10:00
Leon Mika bee3c59239 Fixed action package 2026-05-02 11:47:13 +10:00
Leon Mika 6197ad077f Apply final review fixes: deterministic outputs, abs path, failure-path test, go.mod pin
- Outputs are now written in fixed order so partial writes are reproducible.
- artifact-path output and S3 upload source are resolved to absolute paths,
  matching the README's "absolute path" promise.
- New TestRun_FailureStillRunsCleanup integration test injects a notarization
  failure and asserts the temporary keychain is still deleted, proving the
  cleanup stack runs on every error path.
- go.mod pinned to go 1.22 (matches sample fixture; works on standard macOS
  runner images) instead of the local-development 1.25.0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 10:57:32 +10:00
Leon Mika 3b2fa2d6ae Remove stray go.sum from sample-app fixture
Same artefact go get/test sometimes leaves in fixture directories.
modfile.Parse is text-only and the test path never resolves modules;
the file is unnecessary and matches the cleanup we did after Task 5.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 10:37:50 +10:00
Leon Mika 22aa4d6069 Add end-to-end integration test with fake external binaries
Exercises the full run() pipeline using fake shell scripts on PATH that
record their argv to a temp RECORD_DIR. Verifies all external commands
were invoked, outputs contain the expected version/app/artifact values,
ditto was called twice (pre- and post-staple), and security delete-keychain
ran during cleanup.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 10:37:12 +10:00
Leon Mika 445c99e6c4 Mask base64 cert and document add-mask stdout requirement
DeveloperIDCertBase64 is the .p12 contents and equally sensitive as
the password — register it with the log scrubber so a future code
path that accidentally wraps cfg in a debug log can't leak it. Also
documents why maskSecrets writes to stdout rather than stderr.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 10:34:05 +10:00
Leon Mika 97fb47d023 Wire orchestrator end-to-end
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 10:29:08 +10:00
Leon Mika b86a9dc9eb Bootstrap Go module and action skeleton
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 09:40:04 +10:00