Repository navigation
Releases: Controlvar/controlvar
Release list
v0.39.0
0.39.0 (2026-10-30)
Features
- dashboard: create and run a feature flag's rollout schedule (#1465) (ab3c128)
- dashboard: create, activate and end the global holdout, and read its results (beta) (#1475) (ba7dbf7)
- dashboard: edit a draft experiment's variants and metrics (#1468) (7140c71)
- dashboard: guided setup turns on sequential testing (beta) (#1463) (b3fc517)
- dashboard: manage exclusion groups, and add an experiment to one (#1473) (9f21fa8)
- dashboard: schedule a draft experiment's start and end dates (#1471) (2d19351)
Bug Fixes
- api: a duplicate exclusion group or holdout name answers 409 (#1467) (4bb6bcd)
- api: the experiment page shows a group change or a scheduled start at once when caching is on (#1474) (55b2909)
- dashboard: no light-grey text on the experiment form and page (#1477) (f50190f)
- dashboard: the experiment page says "Starts" for a start still ahead, and shows whether sequential testing is on (#1450) (c27a304)
- dashboard: the experiment page shows its exclusion group and the global holdout, read-only (#1452) (982041c)
- deps: joserfc 1.7.6, for GHSA-9pg5-8c7x-5hfx (#1476) (314bd3e)
- scheduler: a scheduled draft that cannot start stays a draft (#1464) (522fdc9)
- site: one header on every page, with a phone menu (#1472) (fd26ece)
- site: shared links show a preview card (Open Graph and Twitter tags, /og.png) (#1470) (d18d32f)
Images
docker pull ghcr.io/controlvar/controlvar:core-0.39.0 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.39.0 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.39.0 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.39.0 # dashboard, full profile
API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.
Verifying
Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:
cosign verify ghcr.io/controlvar/controlvar:core-0.39.0 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.39.0 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
The same SBOMs are attached below.
v0.38.0
0.38.0 (2026-10-29)
Features
- dashboard: a revenue metric reads as revenue per user, with its difference and interval (#1406) (4421a06)
- results: a revenue metric is analysed as its mean per assigned user (#1400) (7024eeb)
- sdk: the JavaScript and Python SDKs report errors to safety monitoring (#1364) (6f827f9)
- sdk: version 0.2.0 of the JavaScript and Python SDKs (#1421) (fc5c6b2)
Bug Fixes
- ci: the docs journeys raise one alarm issue when the report cannot decide (#1395) (fd78a90)
- ci: the docs-journeys report retries every read and names what fails (#1382) (5b42f12)
- dashboard: better and worse follow lower_is_better; the form sets it (#1393) (d535bef)
- demo: assign each experiment where it is used; keep off-list clicks off the sort bandit (#1403) (dd15c90)
- demo: simulators keep the StreamPulse lift, date nothing ahead, and match the app (#1398) (a23b0fc)
- demo: the rollout story waits for the safety monitor's rollback (#1404) (cd9eddf)
- installer: uninstall counts the cache's automatic backup with what AWS is still clearing (#1399) (83c2095)
- sdk: an event tracked without a key is still sent after the SDK's cache expires (#1358) (940fdf1)
- stats: a mean arm whose values are all equal gets a result, not result_invalid (#1387) (00c498a)
- stats: the winner and recommendation follow a metric's lower_is_better (#1383) (a6cced6)
- tracking: a paused or completed experiment answers control with a reason, not 404 (#1362) (0caf581)
- tracking: events for a paused or completed experiment count in no arm (#1359) (a50c469)
Dependencies
- authlib 1.9.1 for CVE-2026-96760, dnspython 2.9.0 for CVE-2026-114605, sqlglot 30.23.0 (#1325) (e775ead)
Documentation
- api: name CUPED's variance divisor and state the history rule exactly (#1420) (9bfcc47)
- api: the Bayesian example's numbers follow its posteriors (#1409) (341e7cf)
- demo: StreamPulse targets devices through the web SDK; native SDKs send no attributes yet (#1371) (daa687e)
- guide: say no guardrail verdict is produced; Breakdowns of a revenue metric (#1414) (4596352)
- guides: guided examples, every step walked nightly by a journey (#1417) (05f5794)
- guides: guided examples: Buy now arms, the reload rule, CUPED (#1430) (56a3f5d)
- sdk: no SDK page says a paused or completed experiment answers 404 (#1370) (34ae5d1)
- sdk: the provider and edge pages say where a track without a key goes (#1431) (1f8b41c)
Images
docker pull ghcr.io/controlvar/controlvar:core-0.38.0 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.38.0 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.38.0 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.38.0 # dashboard, full profile
API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.
Verifying
Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:
cosign verify ghcr.io/controlvar/controlvar:core-0.38.0 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.38.0 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
The same SBOMs are attached below.
v0.37.0
0.37.0 (2026-10-27)
Features
Documentation
Images
docker pull ghcr.io/controlvar/controlvar:core-0.37.0 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.37.0 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.37.0 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.37.0 # dashboard, full profile
API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.
Verifying
Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:
cosign verify ghcr.io/controlvar/controlvar:core-0.37.0 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.37.0 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
The same SBOMs are attached below.
v0.36.4
0.36.4 (2026-10-23)
Bug Fixes
- email: SMTP email checks the server's certificate, and SMTP_CA_FILE names a private CA (#1329) (297b9b7)
Security note: email through an SMTP server
Published as GitHub security advisory GHSA-j26w-qcgq-rvph.
Who was affected. Releases 0.2.0 to 0.36.3 with email on (EMAIL_ENABLED=true), SMTP_HOST set, and both SMTP_USERNAME and SMTP_PASSWORD set. That includes a SendGrid setup with SMTP_HOST also set, whenever a SendGrid send failed and the API fell back to SMTP. Email through SendGrid alone was not affected, and nothing Controlvar ships turns SMTP on.
What could have been seen. Before 0.36.4 the API did not check the SMTP server's certificate before signing in, so anyone on the network path between the API and the SMTP server could have read the SMTP username and password, and the test email itself. In these releases the API connects to the SMTP server only when a developer or administrator sends a test email (POST /api/v1/notifications/test with "channel": "email" and a recipient); nothing else sends email.
What to do. Upgrade to 0.36.4. Then, if a test email was ever sent with both login settings set, or you cannot tell, change the SMTP password at your mail provider and update SMTP_PASSWORD. Change it after the upgrade, not before: an earlier release would send the new password the same way. In the provider's sign-in records for that username, look for sign-ins from an address other than your API's outbound address, and for mail you did not send.
With SMTP_USERNAME or SMTP_PASSWORD empty, no password was sent; 0.36.4 still sends that mail without STARTTLS unless SMTP_CA_FILE is set (see below).
Email through an SMTP server: what to check after upgrading
- Who: deployments with email on (
EMAIL_ENABLED=true) andSMTP_HOSTset that also set bothSMTP_USERNAMEandSMTP_PASSWORD, or set the newSMTP_CA_FILE. WithSENDGRID_API_KEYset as well, this applies whenever a SendGrid send fails and the API falls back to SMTP. - What changes: the API completes STARTTLS and checks the server's certificate (valid for
SMTP_HOST, trusted by the API image's operating-system certificate store or bySMTP_CA_FILE, TLS 1.2 or later) before it signs in or sends the message. If the server offers no STARTTLS or the certificate does not pass, nothing is sent. SettingSMTP_CA_FILErequires this even without a login. - What to do: use the server's STARTTLS port (usually 587; port 465 is not supported) and check that its certificate is valid for the name in
SMTP_HOST. For a private certificate authority, setSMTP_CA_FILEto a PEM file inside the API container, readable by the API's user (uid 1001). It replaces the default store for SMTP; put both sets of certificates in the file if you need both. - How to check: send a test email with an administrator or developer token and an explicit recipient (
POST /api/v1/notifications/testwith{"channel":"email","recipient":"you@example.com"}) and readsuccessin the response: HTTP 200 alone does not mean it was sent. If it is false, the API log has an error containingSMTP step=that names the step and what to check. If that error says the server accepted the message, confirm delivery before retrying. - Unchanged: email through SendGrid, and the order (SendGrid first, then SMTP when no SendGrid key is set or a SendGrid send fails). With either login setting empty and
SMTP_CA_FILEblank, the SMTP session is as before: no STARTTLS and no login.
Images
docker pull ghcr.io/controlvar/controlvar:core-0.36.4 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.36.4 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.36.4 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.36.4 # dashboard, full profile
API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.
Verifying
Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:
cosign verify ghcr.io/controlvar/controlvar:core-0.36.4 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.36.4 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
The same SBOMs are attached below.
v0.36.3
0.36.3 (2026-10-22)
Dependencies
- bump next to 16.4.1 (GHSA-2464-fhr4-w9xw, GHSA-673q-mjm6-r5xr, GHSA-p3m5-59mp-jv5r) (fdc21d0)
Images
docker pull ghcr.io/controlvar/controlvar:core-0.36.3 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.36.3 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.36.3 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.36.3 # dashboard, full profile
API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.
Verifying
Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:
cosign verify ghcr.io/controlvar/controlvar:core-0.36.3 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.36.3 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
The same SBOMs are attached below.
v0.36.2
Upgrade notes
Security: certifi updated to 2026.10.19 (GHSA-6q48-6c7w-9gw2)
certifi is the Python package that supplies the root certificates the API trusts on many of its outbound HTTPS connections; the others use the operating system's certificate store in the image. The upstream advisory GHSA-6q48-6c7w-9gw2, rated critical, is about one of those roots, emSign ECC Root CA - G3: intermediate certificates that chain to it have compromised private keys and have been revoked. certifi 2026.10.19 no longer contains that root.
- Which images. The API images (
coreandfull) of every release through 0.36.1 ship certifi 2026.7.22. 0.36.2 ships certifi 2026.10.19. The dashboard images and the SDKs do not include certifi. - What used certifi's list. The API checks a server's certificate against certifi's list when it makes these outbound HTTPS connections: calls to AWS services through the AWS SDK, which include sign-in through Amazon Cognito when you enable it; webhook notifications; the LLM proxy's calls to Google Gemini; and, in the
fullimage, integrations with GitHub, Jira and Salesforce and data-warehouse connections. - What used the operating system's list. These outbound connections check the certificate against the operating-system certificate store in the API image instead: calls to Anthropic and OpenAI models (by the LLM proxy, AI experiment design, results interpretation and LLM-as-judge scoring); Slack notifications; email sent through SendGrid; Redis over TLS; and, in the
fullimage, sign-in through OpenID Connect (with GitHub as the provider, its e-mail check uses certifi's list). Through 0.36.1 that store (Debianca-certificates20250419) containedemSign ECC Root CA - G3, and alsoAAA Certificate Services, a root that cross-signed the same compromised intermediates. In 0.36.2 (Debianca-certificates20250419+deb13u1) it contains neither. - Who should upgrade. If your deployment uses any connection in either list, upgrade to 0.36.2. If it signs users in through Amazon Cognito or OpenID Connect, do it first.
- What changes. After the upgrade, a connection to a server whose certificate chains to
emSign ECC Root CA - G3fails verification, whichever list it uses. On the operating system's list, one whose certificate chains only toAAA Certificate Servicesfails as well; certifi's list did not contain that root before either. The other emSign roots are unchanged in both lists. - The fix is to upgrade: pull
core-0.36.2orfull-0.36.2, or rebuild your own image from this release. Nothing in Controlvar's logs would show an interception of this kind.
CDK: dev and demo stacks
CDK: dev and demo now run the API with staging settings. Until this release, a stack deployed with ENVIRONMENT=dev (the default) or ENVIRONMENT=demo gave the API and migration tasks APP_ENV=dev or APP_ENV=demo, which the application runs with development settings: /metrics answered without a token and weak secrets were accepted. They now get APP_ENV=staging, as staging does; staging and prod are unchanged. With staging settings the API also stops allowing pages served from localhost to call it, and a dev or demo stack whose secrets do not meet the staging rules refuses to start on a revision that carries the new value.
cdk deploy of this release does not change an API that is already running: its service moves to a new revision only through a CodeDeploy deployment. To check a stack, read APP_ENV in the revision in service, not in the family's newest revision (which cdk deploy rewrites, so it reads staging at once): TD=$(aws ecs describe-services --cluster experimentation-$ENV --services experimentation-backend-$ENV --query "services[0].taskSets[?status=='PRIMARY'].taskDefinition" --output text), then aws ecs describe-task-definition --task-definition "$TD" --query "taskDefinition.containerDefinitions[?name=='backend'] | [0].environment[?name=='APP_ENV'] | [0].value" --output text. dev or demo means the API in service still runs with development settings.
To fix such a stack, rebuild it from this release ("Destroying an environment" in the CDK guide), or keep it: run cdk deploy, then, from a checkout of this release, IMAGE=$(aws ecs describe-task-definition --task-definition "$TD" --query "taskDefinition.containerDefinitions[?name=='backend'] | [0].image" --output text) and NEW_ARN=$(scripts/register_task_definition.sh experimentation-backend-$ENV "$IMAGE") (it copies the newest revision, changes only the image, and takes a digest only), and deploy $NEW_ARN with Steps 1 and 4 to 6 of "Restart the API on the revision it is serving" in the Rollback Runbook. Do not deploy the newest revision as cdk deploy registers it: its image is the bootstrap placeholder. Replace any secret the start-up refuses; the task's log lists each one.
0.36.2 (2026-10-21)
Bug Fixes
Dependencies
- bump certifi to 2026.10.19 (GHSA-6q48-6c7w-9gw2) (#1309) (c47aeb2)
Documentation
- compose: open the dashboard at localhost and point SDKs at it (#1300) (b46908c)
- self-hosting: the by-hand AWS guide, corrected from an end-to-end run (#1310) (a8e420e)
Images
docker pull ghcr.io/controlvar/controlvar:core-0.36.2 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.36.2 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.36.2 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.36.2 # dashboard, full profile
API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.
Verifying
Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:
cosign verify ghcr.io/controlvar/controlvar:core-0.36.2 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.36.2 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
The same SBOMs are attached below.
v0.36.1
The notes for this release line are in v0.36.0, including which packages are published.
0.36.1 (2026-10-18)
Bug Fixes
Images
docker pull ghcr.io/controlvar/controlvar:core-0.36.1 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.36.1 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.36.1 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.36.1 # dashboard, full profile
API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.
Verifying
Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:
cosign verify ghcr.io/controlvar/controlvar:core-0.36.1 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.36.1 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
The same SBOMs are attached below.
v0.36.0
0.36.0 (2026-10-17)
⚠ BREAKING CHANGES
- sdk: the SDK packages are named
@controlvar/*on npm andcontrolvar/controlvar-openfeatureon PyPI, and Python code imports fromcontrolvarandcontrolvar_openfeature. Only@controlvar/js-sdkandcontrolvar(both 0.1.1) are published so far; install the others from this repository, as each SDK's page shows. The Go module path isgithub.com/controlvar/controlvar/sdk/go; the Java and Android coordinates arecom.controlvar:*. The edge SDK'sbaseUrlis required.
Features
Documentation
Images
docker pull ghcr.io/controlvar/controlvar:core-0.36.0 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.36.0 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.36.0 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.36.0 # dashboard, full profile
API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.
Verifying
Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:
cosign verify ghcr.io/controlvar/controlvar:core-0.36.0 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.36.0 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
The same SBOMs are attached below.
v0.35.0
0.35.0 (2026-10-17)
⚠ BREAKING CHANGES
- Experimently is now Controlvar. New images are ghcr.io/controlvar/controlvar and ghcr.io/controlvar/controlvar-web. The ghcr.io/getexperimently/... images stay where they are; their floating :core and :full tags stay at 0.34.4 and receive no further releases, including security fixes, so pin the new path. Docker Compose keeps its project name and database user, so an upgrade with the new compose.yml keeps its data. The Helm chart is named controlvar; upgrade with your existing release name and every object, the database volume included, keeps its name. Signatures of new images name github.com/Controlvar/controlvar; releases.md gives the identity for each version. The MCP manifest gives the name controlvar. See docs/self-hosting/upgrading-to-controlvar.md.
Features
Images
docker pull ghcr.io/controlvar/controlvar:core-0.35.0 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.35.0 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.35.0 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.35.0 # dashboard, full profile
API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.
Verifying
Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:
cosign verify ghcr.io/controlvar/controlvar:core-0.35.0 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.35.0 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
The same SBOMs are attached below.
v0.35.0-rc.1
Images
docker pull ghcr.io/controlvar/controlvar:core-0.35.0-rc.1 # API, core profile
docker pull ghcr.io/controlvar/controlvar:full-0.35.0-rc.1 # API, full profile
docker pull ghcr.io/controlvar/controlvar-web:core-0.35.0-rc.1 # dashboard, core profile
docker pull ghcr.io/controlvar/controlvar-web:full-0.35.0-rc.1 # dashboard, full profile
API images are built for linux/amd64; dashboard images for
linux/amd64. A host on any other architecture runs them under
emulation.
Verifying
Every image is signed with cosign keyless and carries an SPDX SBOM
attestation:
cosign verify ghcr.io/controlvar/controlvar:core-0.35.0-rc.1 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
cosign verify-attestation --type spdxjson ghcr.io/controlvar/controlvar:core-0.35.0-rc.1 \
--certificate-identity-regexp '^https://github\.com/Controlvar/controlvar/\.github/workflows/release\.yml@refs/(heads/main|tags/v[0-9].*)$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
The same SBOMs are attached below.