Skip to content

Releases: chainloop-dev/chainloop

v0.16.0

23 Aug 10:56
e04db41
Compare
Choose a tag to compare

Highlights

CAS Artifact download endpoint

You can now download any attestation or artifact uploaded to the CAS by accessing the download endpoint and providing the sha256 of the asset.

download

Improved GKE support

@zaibon has done an incredible job at improving the Helm Chart to run natively in GKE which includes, GCP secret manager, cloud-sql proxy and GCP ingress support!

Shoutout

Shoutout to our 2 new contributors @zaibon and @miguelaeh, thanks and welcome!

Changelog

  • e04db41 feat(deployment): support downloading redirect (#310)
  • f36a986 feat(controlplane): CAS download endpoint (#307)
  • 5335cda feat(controlplane): upload attestation to CAS (#308)
  • 126f47b fix(deployment): chart should work with old version of code (#306)
  • 35ff398 feat(deployment): expose HTTP server for CAS (#305)
  • 9853beb feat(cas): download endpoint (#294)
  • a7bb2a5 feat(deployment): allow to configure annotations of controlplane service (#301)
  • 5bde39e chore(chart): release chart with GCP secret manager fix (#299)
  • 4cb7b0c fix(deployment): include cloud-sql auth proxy in migration job when needed (#300)
  • 6118412 feat(slack): truncate message (#292)
  • b6b2fe7 fix(deployment): properly expose service account key for secret manager (#296)
  • f6ec84d feat: show annotations in notifications (#289)
  • 2255ac9 chore: bump chainloop to v0.15.0 (#288)
  • 1d6a571 chore(ci): update Chainloop contract (#283)
  • 9ecf1aa chore: Bump Chart Version v0.15.0 (#286)

v0.15.0

31 Jul 12:38
b2a5117
Compare
Choose a tag to compare

Highlights

Azure DevOps Pipelines Support

Official support for Azure DevOps Pipelines have been added to Chainloop. Learn more about what means here

Annotations and dynamic integration routing

You can now define custom annotations in your Contract that will be required during attestation time. These annotations can be attached to both the attestation globally or to materials individually. Then, they will end up encoded in the attestation but also can be used to dynamically configure integrations #252

Example of contract with annotations

{
        "schemaVersion":  "v1",
        "annotations":  [
                {
                        "name":  "branch",
                        "value": "stable"
                }
        ],
        "materials":  [
                {
                        "type":  "SBOM_CYCLONEDX_JSON",
                        "name":  "controlplane-sbom",
                        "annotations":  [
                                {
                                        "name":  "component",
                                        "value":  "controlplane"
                                }
                        ]
                },
                {
                        "type":  "SBOM_CYCLONEDX_JSON",
                        "name":  "cas-sbom",
                        "annotations":  [
                                {
                                        "name":  "component",
                                        "value":  "cas"
                                }
                        ]
                }
        ]
}

These annotations will be then added to the in-toto attestation like

{
   "_type": "https://in-toto.io/Statement/v0.1",
   "predicateType": "chainloop.dev/attestation/v0.2",
..
   ],
   "predicate": {
      "annotations": {
         "branch": "stable"
      },
     ...
      "materials": [
         {
            "annotations": {
               "chainloop.material.cas": true,
               "chainloop.material.name": "cas-sbom",
               "chainloop.material.type": "SBOM_CYCLONEDX_JSON",
               "component": "cas"
            },
            "digest": {
               "sha256": "ebe2e6ffab93f4b2e2743d3557bd094427ea059adc78cfe2cd330a72f61731e8"
            },
            "name": "sbom.cp.cyclonedx.json"
         },
         {
            "annotations": {
               "chainloop.material.cas": true,
               "chainloop.material.name": "controlplane-sbom",
               "chainloop.material.type": "SBOM_CYCLONEDX_JSON",
               "component": "controlplane"
            },
            "digest": {
               "sha256": "ebe2e6ffab93f4b2e2743d3557bd094427ea059adc78cfe2cd330a72f61731e8"
            },
            "name": "sbom.cp.cyclonedx.json"
         }
      ],
      "metadata": {
         ...
   }
}

and then they can be used during Dependency-Track integration attachment to dynamically generate a project name

$ chainloop attached add --workflow ... --integration ... --opt projectName="{{.Material.Annotations.component}}-{{ .Attestation.Annotations.branch }}" 

pushing both SBOMs to their respective projects

257208139-81aae924-25a9-4888-9f3b-56ce399703eb

Other changes

The attestation UX has been improved with a simpler materials table that now includes annotations, split the digest from the material type and makes better use of the vertical space :)

┌───────────────────────────────────────────────────────┐
│ Workflow                                              │
├────────────────┬──────────────────────────────────────┤
│ ID             │ 3e4ef02c-0f33-4248-84be-8a55ea2e3cb0 │
│ Name           │ only-sbom                            │
│ Team           │                                      │
│ Project        │ foo                                  │
├────────────────┼──────────────────────────────────────┤
│ Workflow Run   │                                      │
├────────────────┼──────────────────────────────────────┤
│ ID             │ 37b75984-be1e-459f-a52e-3af120c35861 │
│ Initialized At │ 31 Jul 23 11:40 UTC                  │
│ Finished At    │ 31 Jul 23 11:40 UTC                  │
│ State          │ success                              │
│ Runner Link    │                                      │
├────────────────┼──────────────────────────────────────┤
│ Statement      │                                      │
├────────────────┼──────────────────────────────────────┤
│ Payload Type   │ application/vnd.in-toto+json         │
│ Verified       │ false                                │
└────────────────┴──────────────────────────────────────┘
┌───────────────────────────────────────────────────────────────────────────────────────┐
│ Materials                                                                             │
├─────────────┬─────────────────────────────────────────────────────────────────────────┤
│ Name        │ cas-sbom                                                                │
│ Type        │ SBOM_CYCLONEDX_JSON                                                     │
│ Value       │ sbom.cp.cyclonedx.json                                                  │
│ Digest      │ sha256:ebe2e6ffab93f4b2e2743d3557bd094427ea059adc78cfe2cd330a72f61731e8 │
│ Annotations │ ------                                                                  │
│             │ component: cas                                                          │
├─────────────┼─────────────────────────────────────────────────────────────────────────┤
│ Name        │ controlplane-sbom                                                       │
│ Type        │ SBOM_CYCLONEDX_JSON                                                     │
│ Value       │ sbom.cp.cyclonedx.json                                                  │
│ Digest      │ sha256:ebe2e6ffab93f4b2e2743d3557bd094427ea059adc78cfe2cd330a72f61731e8 │
│ Annotations │ ------                                                                  │
│             │ component: controlplane                                                 │
└─────────────┴─────────────────────────────────────────────────────────────────────────┘

Changelog

  • b2a5117 feat(dependency-track): support global annotations in project name (#285)
  • d625c2f feat: global annotations support (#284)
  • 1f82638 feat(dependecy-track): interpolated project name (#282)
  • c78fb7e feat: Azure Devops Pipeline support (#276)
  • 0945ae9 feat(attestation): allow runtime annotations (#281)
  • e1672fa fix(dispatcher): do not fail if credentials are missing (#277)
  • 5c9e84f feat(attestation): update status output (#280)
  • c5b6a1b feat: custom annotations (#278)
  • 0264f95 feat: do not fail on cas backend (#275)
  • ac35f0a chore: remove OCI repository references (#274)
  • 798e18c fix(slack): add empty line before escape lines (#270)
  • 7913d64 chore(ci): check generated controlplane migrations (#257)
  • be30ebf feat(deployment): enable SSL during migration (#267)

v0.14.0

20 Jul 15:56
3112af6
Compare
Choose a tag to compare

Highlights

Inline CAS Backend

We've revamped the CAS backend support by

  • Enabling a first-class CLI interation #223
  • Adding a built-in, default, inline CAS support #201: This means that you can start using Chainloop right away without the need of setting up an actual CAS backend (i.e OCI repository).
$ chainloop cas-backend ls
┌──────────────────────────────────────┬─────────────────────────────────────┬──────────┬─────────────────────────────────────┬───────────────┬─────────┐
│ ID                                   │ LOCATION                            │ PROVIDER │ DESCRIPTION                         │ LIMITS        │ DEFAULT │
├──────────────────────────────────────┼─────────────────────────────────────┼──────────┼─────────────────────────────────────┼───────────────┼─────────┤
│ 50536265-ba6f-4be2-87ce-1d584836832f │                                     │ INLINE   │ Embed artifacts content in the atte │ MaxSize: 500K │ false   │
│                                      │                                     │          │ station (fallback)                  │               │         │
├──────────────────────────────────────┼─────────────────────────────────────┼──────────┼─────────────────────────────────────┼───────────────┼─────────┤
│ c9858de4-bd9d-4a07-97a6-b24e49b03037 │ europe-west1-docker.pkg.dev/axiomat │ OCI      │                                     │ MaxSize: 100M │ true    │
│                                      │ ic-grove-366622/chainloop-cas       │          │                                     │               │         │
└──────────────────────────────────────┴─────────────────────────────────────┴──────────┴─────────────────────────────────────┴───────────────┴─────────┘

Improved workflow onboarding

We're aware that the user experience for new users could be much better and that's why apart of removing the CAS requirements via the inline backend described above, we are also simplifying the way you can now get started with a new workflow.

Now, with a single workflow create command you will not only get the workflow and a contract, but also a robot account ready to be imported in your CI/CD system, for example

$ chainloop wf create --name openai-devel --project chainloop 
┌──────────────────────────────────────┬──────────────┬───────────┬─────────────────────┬────────┬─────────────────┐
│ ID                                   │ NAME         │ PROJECT   │ CREATED AT          │ RUNNER │ LAST RUN STATUS │
├──────────────────────────────────────┼──────────────┼───────────┼─────────────────────┼────────┼─────────────────┤
│ 5bdd8f55-4a90-4fcc-a1ce-2c04ba887170 │ openai-devel │ chainloop │ 20 Jul 23 15:08 UTC │        │                 │
└──────────────────────────────────────┴──────────────┴───────────┴─────────────────────┴────────┴─────────────────┘

This is automatically generated Robot Account Token (ID: 5637a326-ddf8-4d21-a8cf-1daf5c7e1f0c). Save the following token since it will not printed again: 

 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.REDACTED.J_U-GmKGXO2yO8npF5XdBFlLHA4BQ4tpcm5Azzf_Ho8

Improved notifications experience #250

Slack, Discord and email plugins now send not only more information but better formated

image

Other changes

  • The Chainloop control-plane image now runs Dependency-Track and Email as actual plugins and are packaged as separated binaries for your security.

Have fun! 🎉

Changelog

  • 3112af6 chore(ci): disable upx (#260)
  • a039a64 Bump Chart Version v0.14.0 (#258)
  • 9054ebc feat(cli): robot account automatically created during the workflow creation (#253)
  • 51a93d0 fix(ci): pin go version (#256)
  • 764e50f feat: add summary table in plugins SDK (#250)
  • 0e4ed8e chore(plugins): enable smtp and dependency-track (#251)
  • fc76074 feat: default inline CAS backend fallback (#247)
  • 7c5572f feat: inline CAS backend support in client (#246)
  • b5f58e7 chore: refactor cas backend providers (#243)
  • 2cba9e0 feat(controlplane): soft-delete CAS backends (#242)
  • d6e7b66 chore(ci): compress binaries (#241)
  • e1ea11b feat(controlplane): update cas-backends (#240)
  • 63d89d5 feat(controlplane): add OCI cas-backend (#239)
  • e2dce30 feat(api): list cas-backends (#238)
  • 6b408bb feat(controlplane): make cas-backend used during attestation immutable (#237)
  • f3dec39 chore(controlplane): s/oci_repository/cas_backend/g (#236)
  • 669878e docs(deployment): make links absolute (#235)
  • df77436 docs: fix deployment example (#234)
  • 6f7e079 feat(deployment): Add support for GCP secret manager to Helm charts (#225)
  • 1267bdf feat(deployment): enable plugins (#233)
  • ed21026 feat(deployment): perform database migrations (#222)

v0.13.0

10 Jul 12:52
17c0867
Compare
Choose a tag to compare

Another great release, this one tuning the plumbing and foundations for new features to come!

Highlights

Plugins framework

We added support for fanOut integrations to become actual plugins. Read more here #207

Versioned migrations

We put in place versioned database migrations so we can have more control on DB schema changes. This is especially important for the upcoming changes related to CAS backends #223

Slack plugin

Send attestation information to Slack via webhooks.

$ chainloop integration available describe --id slack-webhook  
┌───────────────┬─────────┬──────────────────────┬────────────────────────────┐
│ ID            │ VERSION │ MATERIAL REQUIREMENT │ DESCRIPTION                │
├───────────────┼─────────┼──────────────────────┼────────────────────────────┤
│ slack-webhook │ 1.0     │                      │ Send attestations to Slack │
└───────────────┴─────────┴──────────────────────┴────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ Registration inputs                                          │
├─────────┬──────────────┬──────────┬──────────────────────────┤
│ FIELD   │ TYPE         │ REQUIRED │ DESCRIPTION              │
├─────────┼──────────────┼──────────┼──────────────────────────┤
│ webhook │ string (uri) │ yes      │ URL of the slack webhook │
└─────────┴──────────────┴──────────┴──────────────────────────┘
250993827-03908eb3-8cbc-4818-af4f-a65eff049938

Changelog

  • 17c0867 fix(release): do not fail if we can not attest a material (#231)
  • 3b5def0 feat(plugins SDK): implement go-plugin framework (#207)
  • 53efa31 fix(cas): return 404 error if artifact does not exist (#227)
  • 2e47bd8 feat: support SPDX 2.x (#218)
  • bfd154b enhancement(controlplane): versioned migrations support (#220)
  • 95f814f feat: Added Slack plugin (#217)
  • 9f16aff feat(guac): add video to guide (#215)
  • 6148918 chore(ci): Chainloop CLI to v0.12.0 (#214)
  • d4b6736 Bump Chart Version v0.12.0 (#213)

v0.12.0

29 Jun 10:22
771418e
Compare
Choose a tag to compare

It's that time of the week when a new Chainloop release drops with some exciting features!

Highlights

guacsec/guac integration

We've added a preliminary version of the integration with Guac. This integration allows Chainloop users to automatically send attestation (DSSE envelopes / in-toto statements) and CycloneDX/SPDX Software Bill Of Materials (SBOMs) to a cloud storage bucket staging area. From there, GUAC can be configured to continuously monitor and inject that data.

overview

Please refer to this Readme file for more information on how to use it. You can also find the list of available integrations here

FanOut dispatcher improvements

Our original integrations dispatcher had a somewhat naive operation mode #205. It was invoking the integration code on each material separately. This prevented developers to implement plugins that act on aggregate.

image

Our new approach, aggregates all the relevant pieces of evidence and sends it once. Then the developer can decide whether to act on aggregate or not.

image

This new mode enables a myriad of possibilities. From backing up attestation and associated materials all in a transaction to notifying with multiple attachments. The sky is the limit 🚀

Changelog

v0.11.1

19 Jun 12:10
6beb879
Compare
Choose a tag to compare

Highlights

Plugin Framework

This release includes a tech preview of our new Plugin Framework for fanout integrations (#38).

New integrations

We updated our Dependency Track addon and added new integrations for Discord, OCI Registry, and SMTP.

Discord

By connecting Chainloop with Discord, teams can receive real-time notifications and updates on new attestations sent to Chainloop. This integration promotes collaboration, allowing development and SecOps teams to stay connected. Please refer to our README for more information.

Join our Discord Community Server and check our #activity channel to see this plugin in action.

image

OCI Registry

With Chainloop's new OCI Registry integration, you can store your attestations securely and reliably in multiple OCI registries. For compliance reasons, you may want to route attestations from different workflows to separate OCI registries. Please refer to our README for more information.

SMTP

Chainloop's SMTP plugin enables easy integration with email services, ensuring attestation notifications are sent to the relevant stakeholders. Please refer to our README for more information.

Attestations

Attestations are now stored in the database by default (#180).

Changelog

  • 6beb879 fix(integration): do not fail if can't delete associate credentials (#187)
  • 3e52722 fix: nil pointer guard when no attestation is present (#185)
  • 22ed5a5 Bump Chart Version v0.11.0 (#181)
  • b1767e6 feat(controlplane): store attestation in DB (#180)
  • 59caa39 feat(extensions): add Discord extension and additional metadata (#177)
  • b2309f2 feat(extensions): show required materials (#173)
  • 15d7af7 feat(extensions sdk): add statement and predicate context (#175)
  • 1ebea6d docs: Added the troubleshooting section and how to address the docker.sock issue on osx (#171)
  • 6d5405e feat(extensions): OCI extension for attestation upload (#169)
  • 0311143 feat(cli): reorganize attached integrations (#166)
  • 5f69f4f feat(extensions): validate schema options (#167)
  • 159b9bf feat(extensions): add description to fanout integration (#164)
  • 587170a chore: update template descriptions (#163)
  • 7809bc6 feat(extensions): detect duplicated extentions (#165)
  • 9305355 feat(cli): Validate and show options during registration/attachment (#161)
  • 700eb42 feat: Added SMTP extension (#159)
  • 2ae0e82 feat(cli): list/describe available integrations (#154)
  • 08adb57 fix: Choose the random port for HTTP Metrics in the development mode to fix the already-in-use port issues on OSX, refs #160
  • 2654568 chore(cli): new registered namespace for integrations (#153)
  • db5caf0 fix(extensions): documentation for template (#152)
  • 5b87b5d chore(controlplane): rename display-name (#151)
  • 873d84d chore(api): rename integration.Kind with integration.ExtensionID (#150)
  • 918a90b feat(cli): generic integration register and attachment endpoints (#148)
  • e20b883 feat(controlplane): list available extensions in the server (#149)
  • 400fd77 feat(extension sdk): jsonSchema based input definition (#147)
  • cc14230 feat(integrations): add registration display name (#146)
  • 8625aea fix(dispatcher): only download materials that are in the CAS (#145)
  • e25e6eb doc(integrations): create template (#144)
  • 7afd4bd refactor(integrations sdk): UX improvements (#143)
  • 682eb17 feat(third-party-integrations): generic dispatcher (#142)
  • 3c8422f refactor(integrations): dynamic integrations loader (#141)
  • be91c73 Bump Chart Version v0.10.0 (#140)
  • 3e7c9d0 feat(third-party integrations): registration and attachment (#114)

v0.10.0

01 Jun 13:37
v0.10.0
8c37df3
Compare
Choose a tag to compare

Highlights

This release includes

  • Support for GCP Secret Manager (#124)
  • Support for a new material type: JUnit XML (#135)

Shout-outs

Congratulations @gr0 for your first contribution! 🎉

Changelog

  • 8c37df3 chore: upgrade secret-manager and grpc (#137)
  • 1b2410f chore(deps): bump github.com/sigstore/rekor from 1.1.0 to 1.2.0 (#131)
  • 795b91d chore(deps): upgrade kratos (#132)
  • a0d3ad5 feat: Add support for JUnit XML material type (#135)
  • d20db08 refactor(config): extract secret manager configuration (#133)
  • 4f95fab chore(deps): bump github.com/cloudflare/circl from 1.1.0 to 1.3.3 (#112)
  • 707a62c chore: remove prefix from CAS (#130)
  • 27077d1 feat: Add support for GCP Secret Manager (#124)
  • 5b448c5 chore(pb): re-generate bindings using newer version of protoc-gen-go (#129)
  • 8e9ccca chore: Update instructions with the new install.sh Github url (#128)
  • a812ba2 chore(ci): check go mod tidiness (#126)
  • fa993b9 chore(ci): enable cosign verification during chainloop installation (#119)
  • 9087ea9 Bump Chart Version v0.9.1 (#118)

v0.9.1

19 May 15:59
2303e3c
Compare
Choose a tag to compare

Changelog

v0.9.0

09 May 13:18
ed28f86
Compare
Choose a tag to compare

Highlights

This release includes

  • A new version of the Chainloop attestation predicate (v0.2). It replaces the previous way of declaring materials in favor of in-toto v0.1 resource descriptors. See #60 for more information
  • You can now customize your CLI to by default point to the Chainloop instance you might have deployed on your Kubernetes cluster

Shout-outs

Congratulations @danlishka for your first contribution! 🎉

Changelog

  • ed28f86 feat(attestation): enable predicate chainloop.dev/attestation/v0.2 with in-toto ResourceDescriptors (#107)
  • e4b5356 feat(cli): allow setting default values for Control Plane and CAS (#109)
  • 90c6765 feat(attestation): in-toto 1.0 resource descriptor support (#103)
  • 477087c chore: show validation error (#106)
  • 4893e30 chore: upgrade cosign/dsse libraries (#102)
  • 990496d fix: stabilize materials output (#100)
  • ad2e64f docs(deployment): gke monitoring (#95)
  • b817df8 chore(deployment): add default annotations to Helm Chart (#94)
  • 5d35432 docs(deployment): how to guides (#92)
  • 54aaa51 docs: update deployment image (#87)
  • 053637d chore(controlplane): remove authURL deprecated code (#86)
  • 573d221 chore(ci): bump chainloop attestation CLI (#85)
  • 85a082c feat(chart): infer redirect schema (#84)
  • d953e4a Bump Chart Version v0.8.99 (#83)

v0.8.99

19 Apr 17:33
312b34a
Compare
Choose a tag to compare

Changelog