Highlights
The Compose project in label-defined job names. With [global] job-exec-label-scope = project-service, a job-exec job defined by container labels is named {project}.{service}.{job}, so one daemon that watches several Compose projects keeps their jobs apart when the projects reuse a service name such as app. The default scope stays service (#932) — reported by @landure in #927, implemented by @CybotTM.
Job output in the mail body. mail-output-in-body puts the job output into the notification mail instead of the stdout.log and stderr.log attachments: N for the last N lines of stdout and of stderr, -1 for the whole captured output, 0 or unset for the attachments as before (#916) — requested by @eingemaischt in mcuadros#341 (tracked here as #316), first implemented by @Area128 in #882, finished by @CybotTM.
Go 1.27.4. The binaries and images are built with Go 1.27.4; Go 1.27.3 carries GO-2026-6859 in net/http (#933).
Fixed
- Mail notifications need
email-to. A mail behaviour flag alone, such asmail-only-on-errorormail-output-in-bodyin[global], no longer attaches the mail middleware, so a run without a recipient no longer logs a mail error (#919, fixing #917), by @duongynhi000005-oss. ofelia validaterejects an unknownjob-exec-label-scopevalue, and so does the daemon at startup withenable-strict-validation = true; before, the value fell back toservicewith a warning (#932), by @CybotTM.
Changed
- The image's Alpine base moves to 3.24.4 (#929).
- Module updates: docker/cli 29.9.3, go-smtp 0.25.1, validator 10.30.6, klauspost/compress 1.20.4, golang.org/x/term 0.48.0 and golang.org/x/text 0.44.0 (#920, #921, #925, #930, #931, #934).
- README and the configuration docs describe the default label prefix (Compose service name, container name as fallback) and
job-exec-label-scope(#936), by @CybotTM.
Full changelog: v1.1.0...v1.2.0
Container image
ghcr.io/netresearch/ofelia:1.2.0
ghcr.io/netresearch/ofelia:1.2
ghcr.io/netresearch/ofelia:1
Verify your download
Per-asset signatures are bundled. Verify any single file:
cosign verify-blob \
--bundle ofelia-linux-amd64.sigstore.json \
--certificate-identity-regexp "^https://github\.com/netresearch/\.github/\.github/workflows/release-go-app\.yml@" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
ofelia-linux-amd64Verify checksums against the signed manifest:
cosign verify-blob \
--bundle checksums.txt.sigstore.json \
--certificate-identity-regexp "^https://github\.com/netresearch/\.github/\.github/workflows/release-go-app\.yml@" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
checksums.txt
sha256sum -c checksums.txt --ignore-missingVerify build provenance. Releases are built by a reusable
workflow, so the signing identity is that workflow rather than
this repository -- --signer-workflow is required and
verification fails without it:
gh attestation verify <artifact> \
--repo netresearch/ofelia \
--signer-workflow netresearch/.github/.github/workflows/release-go-app.ymlVerify container image:
cosign verify ghcr.io/netresearch/ofelia:1.2.0 \
--certificate-identity-regexp "^https://github\.com/netresearch/\.github/\.github/workflows/release-go-app\.yml@" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"
gh attestation verify oci://ghcr.io/netresearch/ofelia:1.2.0 \
--repo netresearch/ofelia \
--signer-workflow netresearch/.github/.github/workflows/release-go-app.yml