Chalk Release Notes
0.6.3
October 24, 2025
Fixes
- Fixes signing compatibility with cosign 3.x which requires the use of
--bundleincosign sign-blobcommand. (#603)
0.6.2
September 30, 2025
Fixes
- Chalk can segfault parsing some some git object files. (#598)
0.6.1
September 23, 2025
New Features
Support GitHub’s new
{{ job.check_run_id }}:BUILD_IDnow references job id instead of workflow IDBUILD_URIis now complete URI which includes both:- workflow id
- job id (was not available before)
For example:
https://github.com/crashappsec/chalk/actions/runs/1234/job/6789As the
BUILD_URIwont include build attempt anymore, newBUILD_ATTEMPTkey is introduced.
(#591)
Fixes
- Custom reports
use_whennow matches based on the base command name. For exampleuse_when = ["extract"]will send report for allextractsub-commands likeextract.containers. (#590)
0.6.0
September 9, 2025
Breaking Changes
Symlink behavior can now be different between chalking/non-chalking operations. As such:
- renamed
symlink_behavior->symlink_behavior_chalkingconfig - renamed
--symlink-behavior->--chalk-symlink-behaviorCLI flags - added
symlink_behavior_non_chalkingconfig - added
--scan-symlink-behaviorCLI flag along with--ignorechoice flag
(#515)
- renamed
Configuration
ignore_patternswas used only in chalking operations. Now it is used in all chalk operations. (#515)Heartbeat configurations moved from
exec.heartbeat_*configs to separate configuration singletonexec.heartbeat.*.exec.heartbeat.runexec.heartbeat.rateexec.heartbeat.rlimitexec.heartbeat.nice
(#552)
New Features
X509 Certificate codec which can parse PEM/DER files and report metadata keys about the certificate:
_X509_VERSION_X509_SUBJECT_X509_SUBJECT_SHORT_X509_SUBJECT_ALTERNATIVE_NAME_X509_SERIAL_X509_KEY_X509_KEY_TYPE_X509_KEY_SIZE_X509_KEY_USAGE_X509_SIGNATURE_X509_SIGNATURE_TYPE_X509_EXTENDED_KEY_USAGE_X509_BASIC_CONSTRAINTS_X509_ISSUER_X509_ISSUER_SHORT_X509_SUBJECT_KEY_IDENTIFIER_X509_AUTHORITY_KEY_IDENTIFIER_X509_NOT_BEFORE_X509_NOT_AFTER_X509_EXTRA_EXTENSIONS
For example:
{ "_OP_ARTIFACT_TYPE": "x509 Cert", "_X509_VERSION": 3, "_X509_SUBJECT": { "commonName": "DigiCert Assured ID Root CA", "countryName": "US", "organizationName": "DigiCert Inc", "organizationalUnitName": "www.digicert.com" }, "_X509_ISSUER": { "commonName": "DigiCert Assured ID Root CA", "countryName": "US", "organizationName": "DigiCert Inc", "organizationalUnitName": "www.digicert.com" }, "_X509_SERIAL": "17154717934120587862167794914071425081", "_X509_KEY": "-----BEGIN RSA PUBLIC KEY-----\nMIIBCgKCAQEArQ4VzuRDgFyxh/O3YPlxEqWu3CaUiKr0zvUgOShYYAz4gNqpFZUy\nYTy1sSiEiorcnwoMgxd6j5Csiud5U1wxhCr2D5gyNnbM3t08qKLvavsh8lJh358g\n1x/isdn+GGTSEltf+VgYNbxHzaE2+Wt/1LA4PsEbw4wz2dgvGP4oD7Ong9bDbkTA\nYTWWFv5ZnIt2bdfxoksNK/8LctqeYNCOkDXGeFWHIKHP5W0KyEl8MZgzbCLph9Ay\nWqK6E4IR7TkXnZk6cqHm+qTZ1Rcxda6FfSKuPwFGhvYoecix2uRXF8R+HA6wtJKm\nVrO9spftqqfwt8WoP5UW0P+hlusIXxh3TwIDAQAB\n-----END RSA PUBLIC KEY-----\n", "_X509_KEY_TYPE": "rsaEncryption", "_X509_KEY_SIZE": 2048, "_X509_KEY_USAGE": "Digital Signature, Certificate Sign, CRL Sign", "_X509_SIGNATURE": "a2:0e:bc:df:e2:ed:f0:e3:72:73:7a:64:94:bf:f7:72:66:d8:32:e4:42:75:62:ae:87:eb:f2:d5:d9:de:56:b3:9f:cc:ce:14:28:b9:0d:97:60:5c:12:4c:58:e4:d3:3d:83:49:45:58:97:35:69:1a:a8:47:ea:56:c6:79:ab:12:d8:67:81:84:df:7f:09:3c:94:e6:b8:26:2c:20:bd:3d:b3:28:89:f7:5f:ff:22:e2:97:84:1f:e9:65:ef:87:e0:df:c1:67:49:b3:5d:eb:b2:09:2a:eb:26:ed:78:be:7d:3f:2b:f3:b7:26:35:6d:5f:89:01:b6:49:5b:9f:01:05:9b:ab:3d:25:c1:cc:b6:7f:c2:f1:6f:86:c6:fa:64:68:eb:81:2d:94:eb:42:b7:fa:8c:1e:dd:62:f1:be:50:67:b7:6c:bd:f3:f1:1f:6b:0c:36:07:16:7f:37:7c:a9:5b:6d:7a:f1:12:46:60:83:d7:27:04:be:4b:ce:97:be:c3:67:2a:68:11:df:80:e7:0c:33:66:bf:13:0d:14:6e:f3:7f:1f:63:10:1e:fa:8d:1b:25:6d:6c:8f:a5:b7:61:01:b1:d2:a3:26:a1:10:71:9d:ad:e2:c3:f9:c3:99:51:b7:2b:07:08:ce:2e:e6:50:b2:a7:fa:0a:45:2f:a2:f0:f2", "_X509_SIGNATURE_TYPE": "sha1WithRSAEncryption", "_X509_BASIC_CONSTRAINTS": "CA:TRUE", "_X509_SUBJECT_KEY_IDENTIFIER": "45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F", "_X509_AUTHORITY_KEY_IDENTIFIER": "45:EB:A2:AF:F4:92:CB:82:31:2D:51:8B:A7:A7:21:9D:F3:6D:C8:0F", "_X509_NOT_BEFORE": "Nov 10 00:00:00 2006 GMT", "_X509_NOT_AFTER": "Nov 10 00:00:00 2031 GMT" }Certificate behavior can be customized via
certsconfiguration block which includes following configs:certs.filter_methodcerts.always_scan_pathscerts.scan_no_extensioncerts.scan_extensionscerts.ignore_filenamescerts.ignore_prefixescerts.ignore_extensions
Asynchronous metadata collection after
chalk execwith newpostexecreport. Currently it:- watches when known artifacts are accessed by chalk exec (by default watches for cert usage)
This added these configurations:
docker.prep_postexecexec.postexec.runexec.postexec.forkexec.postexec.niceexec.postexec.access_watch.prep_tmp_pathexec.postexec.access_watch.initial_poll_timeexec.postexec.access_watch.initial_poll_intervalexec.postexec.access_watch.scan_codecsexec.postexec.access_watch.scan_paths
_OP_ARTIFACT_ACCESSEDkey which indicates whether the artifact was accessed during chalk operation. (#539)_OP_ARTIFACT_MOUNTEDkey which indicates whether the artifact file is externally mounted (e.g. docker volume). (#559, #563)_OP_ARTIFACT_PATH_WITHIN_VCTLkey which indicates path of the file in the git repo. (#515)Scanning of environment variables for artifacts. Currently only
certscodec supports scanning env vars. This behavior can be customized (by default on) via newenv_varsconfiguration or--[no-]env-varsflag. Additionally new_OP_ARTIFACT_ENV_VAR_NAMEkey indicates name of the environment variable where the artifact was found. (#515)Reporting all IMDSv2 errors in
FAILED_KEYSor_OP_FAILED_KEYS. (#519)During
chalk insertallow chalk to inject itself (binary) into ZIP archive as part of schalk’s AWS Lambda support. Added configurations:zip.inject_binary(--inject-binary-into-zipCLI flag)zip.inject_binary_allowed_extensions(default only.zip)zip.inject_zip_size_threshold(default50Mb)
Chalk can set rlimit for heartbeats process. By default no limit is set. (#544)
Chalk will output its logs in
jsonformat for non-interactive sessions. Each log will include:chalk_version- Chalks version numberchalk_commit- Chalks commit IDchalk_magic- Chalks magic strict to allow to detect chalk logstimestamp- ISO8601 time of the log messagemsg- Log message
(#561)
BUILD_UNIQUE_IDto uniquely identify jobs in GitHub. (#562)In GitHub in the same workflow job, for the same context, cache external tool outputs. This avoid running same external tool multiple times between multiple chalk operations. For example SBOM will be collected only once if the job does multiple
docker builds in the same workflow job. (#566)chalk.envwill extract chalkmark fromchalk.jsonwhen running in AWS Lambda whereLAMBDA_TASK_ROOTis defined. This allows to include original zip archive chalk mark if the zip was chalked. (#579, #582)Add run-time keys mirroring all chalk time
_BUILD_*keys. This allows non-chalking operations to report the metadata about the build such as duringchalk envcommand. (#583)
Fixes
Docker pass-through commands (non build/push) commands were capturing all IO which could possibly fail with OOM. Standard in/out is no longer captured for pass-through commands to resolve that. (#514)
Support for IPv6 Docker registry references (#520)
DOCKERFILE_PATHwas always reported as:stdin:when using docker git context, regardless ifDockerfilewas actually read fromstdin. It will only report:stdin:now when readingDockerfilefromstdin. Otherwise it is omitted and instead ``DOCKERFILE_PATH_WITHIN_VCTLis reports relativeDockerfile` path to the remote git context repository. (#523)When any key in confspec fails, error is ignored which allows all other confspec keys to be collected. Any single error used to throw global exception which prevented all other keys from being collected including required keys like
_ACTION_ID. (#536)Not all containers have
rootuser. When needing to switch torootin wrappedDockerfilenow usingUSER 0:0which should exist at all times. (#539)Chalk does not attempt to normalize
BUILD_TRIGGERCI/CD metadata key. It sends the value as reported by the CI/CD system as over time new triggers are added which chalk would normalize to therefore making normalization not very relevant. (#542)Chalk removes raw secrets as reported by trufflehog and instead:
- ensures
Redactedis always present - adds
RawHashto allow to distinguish between raw secret values
(#543)
- ensures
Chalk
colorconfiguration is now honored for logs. Previously it was only honored for chalk pager outputs. (#549)Better error handling when receiving different in-toto attestation for docker images. (#552)
Handle
SIGTTOU,SIGTTINsignals. In some cases, during chalk exit machinery, when chalk restores full terminal state (as chalk itself can emit terminal control characters such as for colorful logs), it usestcsetattrwhich then sends control sequence to the TTY viaioctlwhich ends up blocking the operation if theSIGTTOUsignal is not handled. This normally does not happen as theSIGTTOUis not sent to chalk however there are cases when it does such as when chalk is wrapped with atimeoututility. Either way handling the signals allows the reset sequence to not-block and exit chalk normally. (#567)Fixed chalkmark JSON parser:
- support for
nullvalues - fixed number parsing. specifically:
- parse float numbers (previously would always normalize to int)
- parse exponents
(#570)
- support for
copy_report_template_keys()now lazily copies keys when the report template is used, not when the function is called. This avoids errors when new keys are added to the source template after the copy function is called. (#576)docker composecommands immediately pass through todocker. Previouslychalkwould attempt to wrapdocker compose builddue to incorrect command line parsing which would then not work as expected asdocker composeis not supported. This would then send invalidbuildreports to the sinks. (#578)ignore_patternsis ignored for explicitly passed paths. For examplechalk insert .foo/barwill insertbareven though its in a hidden folder which would normally be ignored by the ignore patterns. (#580)During
chalk setup, cosign would not be downloaded if not already installed on the system. (#585)
0.5.9
August 14, 2025
- New configuration
docker.update_dockerignorewhich allows chalk to update.dockerignoreto allow to copy files inDockerfile. This allows to wrap legacy builder builds which dont support--build-context. (#556)
0.5.8
July 29, 2025
Fixes
- Fixes chalk calling subprocesses no longer polls for subprocess IO with timeout of 0 which caused chalk pegging CPU while polling for IO. (#550)
0.5.7
May 22, 2025
Fixes
docker pushof chalked image in CI will report differentMETADATA_IDthan what is in the chalkmark. This was a regression in 0.5.5 which was fixing another bug. (#516)
0.5.6
Apr 30, 2025
New Features
VCS_MISSING_FILESkey. It lists all files tracked by version control however missing on disk while chalking an artifact. (#509)
0.5.5
Apr 15, 2025
Breaking Changes
- Tech stack plugin is removed and all its associated configurations as well as keys. (#352)
_SIGNATURESnow includes full cosign attestation payload instead of just the signature. This allows to externally validate the signature without relying on access to the registry. (#505)
Fixes
- In interactive shell, autocomplete script is now only updated when its content is changed. (#493)
- Docker registry throttling errors are retried now before failing out from wrapped build. (#502)
New Features
Basic support for AWS CodeBuild pipelines. (#494)
BUILD_ORIGIN_URIkey which reports URI of resource which originated the CI build. In most cases it will be the repository but could be other resources such as S3 object URI for AWS Code Builds. (#494)Object store which allows to upload specific keys to an object store and reference them in the report vs including full value in the raw report. This allows to both deduplicate some common metadata between builds (e.g. SBOM) as well as make report smaller. See
object_store_confighow to configure the object store. TLDR:auth_config example { auth: "jwt" token: env("TOKEN") } object_store_config example { object_store: "presign" object_store_presign { uri: "https://example.com/objects" read_auth: "example" write_auth: "example" } } report_template example { key.EXAMPLE.use: true key.EXAMPLE.object_store: "example" default_object_store { enabled: true object_store: "example" } }(#500)
copy_report_template_keysbuilt-in function which copies all keys as they are subscribed from one report template to another:report_template one { key.ONE.use = true key.TWO.use = false } copy_report_template_keys("one", "two")(#500)
network.tcp_socket_statusesconfiguration which allows to filter TCP sockets with specific statuses to be reported in_OP_TCP_SOCKET_INFO. (#504)
0.5.4
Feb 19, 2025
Fixes
chalk insertwas running external tools on the exact path being chalked. For examplechalk insert hello.pywould runsemgreponhello.py. Now chalk will compute nearestgitrepository and run external tools on it instead. (#485)- When
Dockerfilespecifies syntax directive, chalk checks buildkit frontend version compatibility as older frontends do not support--build-contextCLI argument. Passing the flag would fail the wrapped build and chalk would fallback to vanilla docker build. More about syntax directive here. (#486) - Heartbeat reports had older timestamps. Reporting state was cleared before sleeping for the heartbeat which meant that timestamp was always off by the heartbeats interval - default 10 minutes. (#487)
New Features
EXTERNAL_TOOL_DURATIONkey which reports external tool duration for each invocation. (#488)run_secret_scanner_toolsconfiguration which then collects newSECRET_SCANNERkey. Currently only trufflehog is supported. (#489)
0.5.3
Feb 3, 2025
Fixes
- Incorrect base image for
DOCKER_COPY_IMAGESwhen using stage index (e.g.COPY --from=<index>). (#479) - Installing shell autocompletion script was wiping bash/zsh rc files. (#480)
0.5.2
Jan 28, 2025
Fixes
_REPO_TAGSdid not include all pushed tags when usingbuildx build --pushwithout--load. (#471)Requests to AWS API were incorrectly signed due to additional headers being included in AWS sigv4. This impacted:
- uploading reports to s3 sink
- lambda plugin as it could not get caller identity
This was a regression from
0.4.14.(nimutils #82, #473)
0.5.1
Jan 17, 2025
Fixes
- For
docker build,--platformwas not honored when pinning base images. (#468) _REPO_URLSwas not extractingorg.opencontainers.image.urlannotation correctly. (#468)
0.5.0
Jan 08, 2025
Breaking Changes
Changes to docker image related fields.
Removed keys:
_IMAGE_DIGEST- there are cases when the image digest is mutated. For exampledocker pull && docker pushdrops all manifest annotations resulting in a change to the digest. It is recommended to use_REPO_DIGESTSinstead as it will include all digests per repository._IMAGE_LIST_DIGEST- it is possible to create manifests outside the build context which results in multiple list manifests for the same image. The new_REPO_LIST_DIGESTSkey provides a list of all digests per repository.
Changed keys:
_REPO_DIGESTSpreviously (and incorrectly) would return the first registry and the image digest. This key now provides a list of image digests by registry and image name.Before:
{ // old format "_REPO_DIGESTS": { "224111541501.dkr.ecr.us-east-1.amazonaws.com/co/chalketl/scripts": "249ce02d7f5fe0398fc87c2fb6c225ef78912f038f4be4fe9c35686082fe3cb0" } }Now:
{ // new format "_REPO_DIGESTS": { "registry-1.docker.io": { "library/alpine": [ "029a752048e32e843bd6defe3841186fb8d19a28dae8ec287f433bb9d6d1ad85" ] } } }_REPO_TAGSnow includes tags which are only available in the registry. Builds without--push, even when provided with--tag, will not populate_REPO_TAGSanymore. In addition similarly to_REPO_DIGESTS, it is an object where each tag is associated with its digest (either list or image digest). For example:{ "_REPO_TAGS": { "registry-1.docker.io": { "library/alpine": { "latest": "1e42bbe2508154c9126d48c2b8a75420c3544343bf86fd041fb7527e017a4b4a" } } } }DOCKER_BASE_IMAGES- sub-keys:namerenamed touri; contains the full repository uri (tag and digest)- new
registrykey; the normalized registry uri (domain and optional port) - new
namekey; the normalized repo name within the registry
Before:
// old format { "from": "nginx:1.27.0", "tag": "1.27.0", "name": "nginx:1.27.0", "repo": "nginx" }Now:
// new format { "from": "nginx:1.27.0@sha256:97b83c73d3165f2deb95e02459a6e905f092260cd991f4c4eae2f192ddb99cbe", "uri": "nginx:1.27.0@sha256:97b83c73d3165f2deb95e02459a6e905f092260cd991f4c4eae2f192ddb99cbe", "repo": "nginx", "registry": "registry-1.docker.io", "name": "library/nginx", "tag": "1.27.0", "digest": "97b83c73d3165f2deb95e02459a6e905f092260cd991f4c4eae2f192ddb99cbe" }DOCKER_COPY_IMAGES- similar toDOCKER_BASE_IMAGES, thenamekey has been renamed touriand adds theregistryandnamekeys.
New keys:
_REPO_LIST_DIGESTS- similar to_REPO_DIGESTSbut enumerates any known list digests. Example:{ "_REPO_LIST_DIGESTS": { "registry-1.docker.io": { "library/alpine": [ "1e42bbe2508154c9126d48c2b8a75420c3544343bf86fd041fb7527e017a4b4a" ] } } }_REPO_URLS- similar to_REPO_DIGESTSbut shows human-accessible URL, if known as per OCI image annotation or computed for Docker Hub images. Example:{ "_REPO_URLS": { "registry-1.docker.io": { "library/alpine": "https://hub.docker.com/_/alpine" } } }
NOTE: All
_REPO_*keys normalize registry to its canonical domain. For example, docker hub is normalized toregistry-1.docker.io. Additionally, all image names are normalized to how they are stored in the registry. Notelibrary/prefix foralpinein the example above.Git time-related fields are now reported in ISO-8601 format whereas previously it was reporting using default git format.
Before:
{ "DATE_AUTHORED": "Tue Dec 10 11:46:06 2024 -0500", "DATE_COMMITTED": "Tue Dec 10 11:46:06 2024 -0500", "DATE_TAGGED": "Tue Dec 10 11:46:06 2024 -0500" }Now:
{ "DATE_AUTHORED": "2024-12-10T16:46:06.000Z", "DATE_COMMITTED": "2024-12-10T18:49:00.000Z", "DATE_TAGGED": "2024-12-10T18:49:00.000Z" }This also affects all host-level keys in addition to chalk-level keys:
DATE_AUTHOREDDATE_COMMITTEDDATE_TAGGED_DATE_AUTHORED_DATE_COMMITTED_DATE_TAGGED
To make parsing easier, in addition to human readable
DATE_*fields, newTIMESTAMP_*fields are added which report milliseconds since Unix epoch:{ "DATE_AUTHORED": "2024-12-10T16:46:06.000Z", "DATE_COMMITTED": "2024-12-10T18:49:00.000Z", "DATE_TAGGED": "2024-12-10T18:49:00.000Z", "TIMESTAMP_AUTHORED": 1733849166000, "TIMESTAMP_COMMITTED": 1733856540000 "TIMESTAMP_TAGGED": 1733856540000 }(#458)
All datetime fields are now reported in UTC TZ whereas previously were reported in machines local TZ (#458)
Fixes
DOCKERFILE_PATH_WITHIN_VCTLkey is no longer reported when providing Dockerfile contents viastdin(#454).Git time-related fields report accurate timezone now. Previously wrong commit TZ was being reported as committed in git which was not correct. (#458)
_OP_ERRORSincludes all logs from chalkmarkERR_INFO, even when its collection fails (#459)docker buildx buildwithout both--pushor--loadreport their chalkmarks now. Chalkmarks however are missing any runtime keys as those cannot be inspected due to image neither being pushed to a registry or loaded into local daemon. Such an image is normally inaccessible however it is still in buildx cache hence it can be used in subsequent builds. (#459)
New Features
Chalk pins base images in
Dockerfile. For example:FROM alpineWill be pinned to:
FROM alpine@sha256:beefdbd8a1da6d2915566fde36db9db0b524eb737fc57cd1367effd16dc0d06dThis makes docker build deterministic and avoids any possible race conditions between chalk looking up metadata about base image and actual docker build. (#449)
Docker annotations new keys:
DOCKER_ANNOTATIONS- all--annotations using indocker build_IMAGE_ANNOTATIONS- found annotations for an image in registry
(#452)
Docker base image keys:
_OP_ARTIFACT_CONTEXT- what is the context of the artifact. Fordocker buildits eitherbuildorbase.DOCKER_BASE_IMAGE_REGISTRY- just registry of the base imageDOCKER_BASE_IMAGE_NAME- repo name within the registryDOCKER_BASE_IMAGE_ID- image id (config digest) of the base imageDOCKER_BASE_IMAGE_METADATA_ID- id of the base image chalkmark- `DOCKER_BASE_IMAGE_CHALK`` - full chalkmark of base image
_COLLECTED_ARTIFACTS- similar to_CHALKSbut reports collected information about potentially non-chalked artifacts such as the base image. If the base image is chalked it can be correlated with the build chalkmark viaMETADATA_ID. Otherwise both artifacts can be linked via the digest or the image id.
_IMAGE_LAYERSkey which collects image layer digests as it is stored in the registry. This should allow to correlate base images by matching layer combinations from other images. (#456)_DOCKER_USED_REGISTRIES- Configurations about all used docker registires during chalk operation. For example:{ "_DOCKER_USED_REGISTIES" { "example.com:5044": { "url": "https://example.com:5044/v2/", "mirroring": "registry-1.docker.io", "source": "buildx", "scheme": "https", "http": false, "secure": true, "insecure": false, "auth": true, "www_auth": false, "pinned_cert_path": "/etc/buildkit/certs/example_com_5044/ca.crt", "pinned_cert": "-----BEGIN CERTIFICATE-----\n..." } } }(#461)
0.4.14
Nov 11, 2024
Breaking Changes
Changes in embed attestation provider configuration. Removed
attestation_key_embed.locationconfiguration. It is replaced with these configurations:attestation_key_embed.filenameattestation_key_embed.save_pathattestation_key_embed.get_paths
This allows to separate paths where
chalk setuplook-ups keys as well where chalk will save generated key. Also this allows to lookup keys relative tochalkbinary which is better suited for CI workflows where it might not be desirable to add additional files in current working directory. (#445)chalk setuprequires interactive shell to generate new key-material. This will avoid accidentally generating new keys in CI. (#447)
Fixes
- When running
semgrep, its always added toPATH, as otherwise semgrep is not able to findpysemgrepfolder. (#439) - Docker pushing non-chalked images did not report metsys
plugin keys such as
_EXIT_CODE,_CHALK_RUN_TIME. (#438) - External tools for non-file artifacts (e.g. docker image)
sent duplicate keys in both report-level as well as
chalk-mark level. For example
SBOMkey with equivalent content was duplicated twice. (#440) - Memory leak in HTTP wrappers in
nimutils. This mostly manifested inchalk execwhen heartbeats were enabled as roughly each heartbeat would increase memory footprint by ~1Mb. (#443)
New Features
_EXEC_IDkey which is unique for eachchalkexecution for all commands while chalk process is alive. For example it will send consistent values for bothexecandheartbeatreports hence allowing to tie both reports together.heartbeatreport template. It is a minimal reporting template which is now used as the default report template for all heartbeat reports. Main purpose of heartbeat is to indicate liveliness hence such a minimal report. All other metadata should be collected as part ofexecreport instead.
0.4.13
Oct 10, 2024
New Features
_OP_EXIT_CODEkey which reports external commands exit code such as forchalk docker build. (#417)_OP_CLOUD_SYS_VENDORkey for reporting sys vendor file content used to identity cloud provider. (#418)FAILED_KEYSand_OP_FAILED_KEYS- metadata keys which chalk could not collect metadata for. Each key contains:code- short identifiable code of a known errormessage- exact encountered error/exception messagedescription- human-readable description of the error with additional context how to potentially resolve it
(#422)
_NETWORK_PARTIAL_TRACEROUTE_IPS- collect local network subnet IPs even when running inside docker network-namespaced (not using--network=host) container (#425)DOCKERFILE_PATH_WITHIN_VCTLkey reports the path of aDockerfilerelative to the VCS’ project root. (#426)
0.4.12
Aug 29, 2024
Breaking Changes
- Removing
attestation_key_backupprovider. It was an experimental service which is discontinued in favor of other attestation providers. (#411)
Fixes
conffileplugin was sending some empty keys vs skipping them during reporting. Now it has matching behavior to other plugins which ignores empty keys. (#412)- AWS instance is determined from board_asset_tag file when
present. This allows to report
_AWS_INSTANCE_IDeven when cloud metadata endpoint is not reachable. (#413) - Reporting AWS Lambda functions ARN for non-us-east-1 regions. Previously global STS AWS endpoint was used which cannot fetch STS get-caller-identity for other AWS regions. (#414)
0.4.11
Aug 13, 2024
Fixes
dockerrun-time host metadata collection was failing for non-build commands such asdocker push. (#399)procfsplugin was throwing an exception while parsing/proc/net/devto populate_OP_IPV[4/6]_INTERFACESkeys. (#399)_IMAGE_DIGESTis sent fordocker pushwhen buildx is not available. Normally chalk needs to validate type of the manifest in the registry (image or list) which is currently done viabuildx imagetools. When buildx is missing and the operation wasdocker pushthe pushed image can only be image manifest as only buildx supports list manifests. (#401)_REPO_DIGESTSwas reported even when image digest was not known during buildx-enabled docker builds. (#402)METADATA_IDandMETADATA_HASHwere incorrectly computed for alldocker pushoperations. (#403)
0.4.10
Aug 5, 2024
Fixes
Fixing
ENTRYPOINTwrapping for empty-like definitions:ENTRYPOINTENTRYPOINT []ENTRYPOINT [""]Now chalk correctly parses and wraps as appropriate depending on the use of buildkit.
(#396)
Other
- Increasing cloud metadata endpoint collection timeout from 500ms to 1sec as in some cases it takes longer than 500ms to get a response. (#388)
- Not showing
execreport when chalk is running in interactive shell. (#390) - Not showing any
chalk execlogs when running in interactive shell. (#394)
0.4.9
July 30, 2024
Fixes
- When base image is already wrapped by chalk,
ENTRYPOINTwas recursively wrapped which broke image runtime as it was always exiting with non-zero code. (#385)
New Features
docker buildanddocker pushnow usemark_defaultchalk template instead ofminimal. As such basic metadata about the repository is now included by default in the chalk mark (e.g./chalk.json) such as the repository origin and commit id. (#380)New chalk keys:
DOCKER_TARGET- name of the target being built inDockerfileDOCKER_BASE_IMAGES- breakdown of all base images across all sections ofDockerfileDOCKER_COPY_IMAGES- breakdown of all externalCOPY --fromacross all sections ofDockerfile
(#382)
0.4.8
July 12, 2024
Fixes
A chalk report would previously omit the
_OP_CLOUD_PROVIDERand_OP_CLOUD_PROVIDER_SERVICE_TYPEkeys when:- No other instance metadata key (e.g.
_GCP_INSTANCE_METADATAor_OP_CLOUD_PROVIDER_IP) was subscribed. - The instance metadata service couldn’t be reached, or returned invalid data.
- No other instance metadata key (e.g.
_OP_ERRORSwas missing any logs/errors from plugins. The key was collected by thesystemplugin which is executed first. The key is now populated bymetsysplugin which is executed last. (#369)
0.4.7
June 24, 2024
Fixes
- Docker build
--metadata-fileflag is only added when usingbuildx >= 0.6.0. In addition the flag is only added when usingdocker >= 22as docker aliaseddocker buildtodocker buildx buildwhich allows to use buildx flags in normal build command. (#357)
0.4.6
June 20, 2024
Fixes
Chalk did not extract correct commit ID for git repos with
HEADbeing symbolic reference to an annotated tag. This usually happens viagit symbolic-ref HEAD. (#347)Chalk misreported annotated git tag as not annotated. To ensure tag is up-to-date with origin, chalk refetches regular tags (not annotated) from origin. To customize this behavior use
git.refetch_lightweight_tagsconfig. (#349)Chalk docker build did not support remote git context which was neither a tag or a branch. For example:
docker build https://github.com/user/repo.git#refs/pull/1/merge(#351)
Chalk did not correctly handle git annotated tags with an empty message. (#354)
0.4.5
June 14, 2024
Fixes
- Docker push of distroless image built without
buildxcould not extract chalk mark from the image. (#338) - Chalk did not handle git branch names with
/in them and therefore could not report correct branch name/commit id. (#340) - For packed repos (e.g. via
git gc), chalk could not report all git-related keys likeCOMMIT_ID,TAG, etc. (#341)
New Features
- Added
BUILD_COMMIT_IDkey. This reports the commit ID which triggered the build in CI/CD. (#339)
0.4.4
June 12, 2024
Fixes
chalk execdid not pass full executable being execed in arguments inexecv()syscall. This broke distro-less Python images which used virtualenv assys.executablewasn’t virtual env python but instead was system python path. (#333)
0.4.3
June 10, 2024
Fixes
BUILD_URIfor GitHub actions now includes run attempt in the URI. PreviouslyBUILD_URIalways linked to latest attempt. (#320)- Building Docker image on top of previously wrapped chalked
base image,
/chalk.jsonnow correctly indicates it is not the original wrapped base image. Previouslychalk execwould report chalk mark from/chalk.jsonwhich was from the base image which is not expected. (#322) - Docker build without
buildxwas failing for distroless images with non-rootUSER. (#323)
0.4.2
June 5, 2024
Fixes
- When building Chalk on macOS, downloading root certs could fail due to missing quotes around the URL (nimutils #68)
- Regression:
chalk loaddid not revalidate previously loaded components in Chalk since >=0.4.0 (#313) - The external tool
semgrepnow correctly scans the Chalk context folder. Previously, it always scanned the current working directory, which produced incorrect scans when the Docker context was outside that directory. (#314) - Without Buildx, Docker failed to wrap
ENTRYPOINTwhen the Docker context folder already had a file/directory namedchalkordocker. (#315) - With Buildx, Docker failed to wrap
ENTRYPOINTwhen achalkbinary was located next to.dockerignore(e.g. in the Chalk repo itself) becausechalkcould not be copied during the build. (#315)
New Features
New chalk keys:
- New key holding GCP project metadata:
_GCP_PROJECT_METADATA(#311)
- New key holding GCP project metadata:
The Chalk external tools
syftandsemgrepare now run via Docker when they are not installed and Docker is available. This avoids the need to install them on the host system. (#314)
0.4.1
May 30, 2024
Fixes
New Features
New chalk keys:
- Keys to identify the origin repository, using
an identifier provided by the CI/CD system:
BUILD_ORIGIN_IDBUILD_ORIGIN_KEYBUILD_ORIGIN_OWNER_IDBUILD_ORIGIN_OWNER_KEY
(#303)
- Keys to identify the origin repository, using
an identifier provided by the CI/CD system:
0.4.0
May 28, 2024
Breaking Changes
Removed chalk keys:
_IMAGE_VIRTUAL_SIZE- deprecated by docker_IMAGE_LAST_TAG_TIME- scoped to local daemon and is not shared with buildx. Many images report as0001-01-01T00:00:00Z_IMAGE_STORAGE_METADATA- metadata of a docker storage driver and is not directly related to docker imageDOCKER_CHALK_TEMPORARY_TAG- chalk no longer adds temporary tag to docker builds_SIGNATURE- cosign generates unique signature per registry. New key is_SIGNATURES._OP_HOSTINFO- renamed to_OP_HOST_VERSION_OP_NODENAME- renamed to_OP_HOST_NODENAMEHOSTINFO_WHEN_CHALKED- renamed toHOST_VERSION_WHEN_CHALKEDNODENAME_WHEN_CHALKED- renamed toHOST_NODENAME_WHEN_CHALKED
Changed chalk keys:
DOCKER_CHALK_ADDED_TO_DOCKERFILE- is now a list vs a single string_IMAGE_STOP_SIGNAL- is now a string vs an int. Docker always reported stop signal as string. This was a mistake in field definition.
(#282)
Removed configurations:
extract.search_base_layers_for_marks- chalk mark is not guaranteed to be top layer in all cases. For example it is not top layer without buildx. Therefore all layers must be searched.load.update_arch_binaries- docker multi-platform builds ensure config is loaded into multi-arch chalk binaries and therefore it is not needed to pre-load any configurations at load time. This also removedchalk load --update-arch-binariesflag.
push_defaultreporting template is removed aspushis now a top-level chalkable operation and therefore it now usesinsertion_defaulttemplate. (#282)When loading custom configs with
chalk load, metadata collection is disabled for all plugins except for required chalk plugins. (#286)
Fixes
- Fixed not being able to wrap docker builds when using
scratchas base image. (#266) - Docker ENTRYPOINT wrapping base image inspection works without requiring buildx. (#282)
- Docker builds without buildx could fail when base image
specified
USER. (#285) - Tech stack plugin will hang when running chalk from
/as it would attempt to scan things like/dev/random. (#286) - Docker wrapping was resetting image
CMDwhen base image hadENTRYPOINTdefined. (#286) - GCP instance metadata collection does not work by DNS name reliably so switched to hard-coded IP. (#293)
New Features
Chalk docker builds now fully support manifest lists. This affects all commands which produce manifest lists such as multi-platform builds and new features like
--provenance=trueand--sbom=true. (#282)New Chalk keys:
_IMAGE_COMPRESSED_SIZE- compressed docker image size when collecting image metadata directly from the registryDOCKER_PLATFORMS- all platforms used in docker buildDOCKER_FILE_CHALKED- post-chalk Dockerfile content as it is built- Docker base image fields:
DOCKER_BASE_IMAGE- base image used in DockerfileDOCKER_BASE_IMAGE_REPO- just the repo nameDOCKER_BASE_IMAGE_TAG- just the tagDOCKER_BASE_IMAGE_DIGEST- just the digest
- Docker versions and general information:
_DOCKER_CLIENT_VERSION_DOCKER_SERVER_VERSION_DOCKER_BUILDX_VERSION_DOCKER_INFO- output ofdocker info_DOCKER_BUILDER_BUILDKIT_VERSION_DOCKER_BUILDER_INFO- output ofdocker buildx inspect <builder>
_IMAGE_DIGEST- docker registry v2 image manifest digest_IMAGE_LIST_DIGEST- docker registry v2 image list manifest digest_IMAGE_PROVENANCE- provenance JSON when image was built with--provenance=true_IMAGE_SBOM- SBOM JSON when image was built with--sbom=true_SIGNATURES- all docker registry cosign signatures- All
uname()fields have dedicated fields:HOST_SYSNAME_WHEN_CHALKEDHOST_NODENAME_WHEN_CHALKEDHOST_RELEASE_WHEN_CHALKEDHOST_VERSION_WHEN_CHALKEDHOST_MACHINE_WHEN_CHALKED_OP_HOST_SYSNAME_OP_HOST_NODENAME_OP_HOST_RELEASE_OP_HOST_VERSION_OP_HOST_MACHINE
- All git keys now are also sent as run time host keys.
This allows to report from what repo the report is
running even if its different from repos of individual
chalk marks or when there are no chalk marks.
_ORIGIN_URI_BRANCH_TAG_TAG_SIGNED_COMMIT_ID_COMMIT_SIGNED_AUTHOR_DATE_AUTHORED_COMMITTER_DATE_COMMITTED_COMMIT_MESSAGE_TAGGER_DATE_TAGGED_TAG_MESSAGE
Docker build
cosignattestation is pushed to each tagged registry. As a result attestations can be validated from any registry when pulling images. (#284)docker/buildx/cosignversions are now printed inchalk versioncommand. (#282)New command for dumping all user configurations as json as well as corresponding load all flag to import them:
chalk dump all | chalk load --replace --all -(#286)
Docker multi-platform builds now automatically downloads corresponding chalk binary for other architectures if not already present on disk.
(#286)
New chalk configurations:
docker.arch_binary_locations_path- path where to auto-discover chalk binary locations for docker multi-platform builds.docker.download_arch_binary- whether to automatically download chalk binaries for other architectures.docker.download_arch_binary_urls- URL template where to download chalk binaries.docker.install_binfmt- for multi-platform builds automatically install binfmt when not all platforms are supported by the buildx builder
(#286)
--skip-custom-reportsflag. Together with--skip-command-reportallows to completely disable chalk reporting. Note that metadata collection is still going to happen as metadata still needs to be inserted into a chalkmark. Just no report about the operation is going to be omitted. (#286)
0.3.5
Apr 05, 2024
Breaking Changes
- S3 sinks must now specify the bucket region. Previously
it defaulted to
us-east-1if theAWS_REGIONorAWS_DEFAULT_REGIONenvironment variables were not set (#246)
Fixes
- The Docker codec is now bypassed when
dockeris not installed. Previously, any chalk sub-scan such as duringchalk exechad misleading error logs. (#248) chalk docker ...now exits with a non-zero exit code whendockeris not installed. (#256)- Fixed parsing CLI params when wrapping
docker(renamechalkexe todocker) and a docker command had a “docker” param. (#257)
0.3.4
Mar 18, 2024
Breaking Changes
Attestation key generation/retrieval was refactored to use key providers. As such, all previous config values related to signing backup service have changed.
Removed attributes:
use_signing_key_backup_servicesigning_key_backup_service_urlsigning_key_backup_service_auth_config_namesigning_key_backup_service_timeoutsigning_key_location
Instead now each individual key provider can be separately configured:
attestation { key_provider: "embed" # or "backup" which enables key backup provider # as previously configured by # `use_signing_key_backup_service` attestation_key_embed { location: "./chalk." # used to be `signing_key_location` } attestation_key_backup { location: "./chalk." # used to be `signing_key_location` uri: "https://..." # used to be `signing_key_backup_service_url` auth: "..." # used to be `signing_key_backup_service_auth_config_name` timeout: << 1 sec >> # used to be `signing_key_backup_service_timeout` } }(#239)
Fixes
- Docker build correctly wraps
ENTRYPOINTwhen base image has it defined. (#147) - Fixes a segfault when using secrets backup service
during
chalk setup. (#220) - Honoring cache component cache on chalk conf load. (#222)
- Fixes a segfault when accidentally providing
http://URL to a sink instead ofhttps://. (#223) - Fixes leaking FDs which didn’t allow to chalk large zip files such as large Java jar file. (#229)
- Fixes chalking zip file reporting git-repo keys. (#230)
- Fixes cosign not honoring
CHALK_PASSWORDin all operations. (#232) - Git plugin did not parse some git objects correctly which in some cases misreported git keys. (#241)
- Fixes
chalk loadnot honoring default parameter value after any incorrect previous value was provided (#242)
New Features
memoizecon4m function which allows caching function callback result into chalk mark for future lookups. (#239)auth_headerscon4m function which allows getting auth headers for a specific auth config. (#239)parse_jsoncon4m function which parses JSON string. (#239)getattestation key provider which allows to retrieve key-material over API. (#239)chalk execdoes not require--exec-command-nameand can get command name to exec directly from args:chalk exec -- echo hello(#155)
0.3.3
Feb 26, 2024
New Features
Chalk can now write two new keys to chalk marks and reports:
COMMIT_MESSAGE: the entire commit message of the most recent commit.TAG_MESSAGE: the entire tag message of an annotated tag, if the current repo state has such a tag.
If the commit or tag is signed, the
COMMIT_MESSAGEorTAG_MESSAGEvalue does not contain the signature. (#211)Chalk falls back to bundled Mozilla CA Store when there are no system TLS certs to use (e.g. busybox container). (#196)
Fixes
- Fixes possible exception when signing backup service would return non-json response (#189)
- Signing key backup service is only called for chalk
commands which require cosign private key -
insert/build/push.
As a result other commands such as
execdo not interact with the backup service. (#191) - Fixing docker build attempting to use
--build-contexton older docker versions which did not support that flag. (#207) - Fixes
echo foo | chalk docker login --password-stdinasstdinwas not being closed in the pipe to docker process. (#209)
0.3.2
Feb 2, 2024
Fixes
- Fixes a typo in
chalk versionfor the build date. (#148) TERM=dumprenders without colors (#163)AWS_REGIONenv var is honored ins3sinks (#164)- Show GitHub chalk report on
chalk extract(#166) chalk help docgenshows help fordocgencommand (#173)chalk loadwould duplicate already loaded components in the config (#176)chalk setupwould not honor existing keys, if present (#184)
0.3.1
Jan 23, 2024
Breaking Changes
- Remove the
--no-api-loginoption. (#137)
New Features
- Add support for arm64 Linux once again. It was omitted from the Chalk 0.3.0 release.
Fixes
- Fix some rendering bugs.
Known Issues
If a docker base image has
ENTRYPOINTdefined,docker.wrap_cmdwill break it as it overwrites its ownENTRYPOINT. Next release will correctly its ownENTRYPOINT. A later release will correctly inspect all base images and wrapENTRYPOINTcorrectly.This release does not support x86_64 macOS. It will be supported once again in a later release.
0.3.0
Jan 15, 2024
Breaking Changes
_OP_CLOUD_METADATAis now a JSON object vs a string containing JSON data. In addition cloud metadata is now nested to allow to include more metadata about running cloud instances. (#112)The signing key backup service has been completely overhauled and no longer uses the OIDC Device Code Flow to authenticate to the API. Instead a pre-generated API access token is passed in chalk profile and that value is used as the bearer token. The
setupcommand still generates keys for signing but will no longer prompt with a QR code to authenticate to the API.As a result of the above the
loginandlogoutcommands have been removed.A number of signing key backup related configuration values and variables have had their names changed to be more description:
CHALK_API_KEY->CHALK_DATA_API_KEYuse_secret_manager->use_signing_key_backup_servicesecret_manager_url->signing_key_backup_service_urlsecret_manager_timeout->signing_key_backup_service_timeout
New Features
Adding support for git context for docker build commands. (#86)
Adding new git metadata fields about:
- authored commit
- committer
- tag
Improved pretty printing for various commands (#99)
Added
github_json_groupfor printing chalk marks in GitHub Actions. (#86)Adding
presignsink to allow uploads to S3 without hard-coded credentials in the chalk configuration. (#103)Adding JWT/Basic auth authentication options to sinks. (#111)
Adding
docker.wrap_cmdto allow to customize whetherCMDshould be wrapped whenENTRYPOINTis missing inDockerfile. (#112)Adding minimal AWS lambda metadata collection. It includes only basic information about lambda function such as its ARN and its runtime environment. (#112)
Adding experimental support for detection of technologies used at chalk and runtime (programming languages, databases, servers, etc.) (#128)
Fixes
- Fixes docker version comparison checks. As a result buildx is correctly detected now for >=0.10. (#86)
- Subprocess command output was not reliable being captured. (#93)
- Fixes automatic installation of
semgrepwhen SAST is enabled. (#94) - Ensuring chalk executable has correct permissions. Otherwise reading embedded configuration would fail in some cases. (#104)
- Pushing all tags during
docker build --push -t one -t two .... (#110) - Sending
_ACTION_IDduringpushcommand. (#116) - All component parameters are saved in the chalk mark. (#126)
- Gracefully handling permission issues when chalk is running
as non-existing user. This is most common in lambda
which runs as user
993. (#112) CMDwrapping supports wrapping shell scripts (e.g.CMD set -x && echo hello). (#132)
Known Issues
If a docker base image has
ENTRYPOINTdefined,docker.wrap_cmdwill break it as it overwrites its ownENTRYPOINT. A later release will correctly inspect all base images and wrapENTRYPOINTcorrectly.This release does not support:
- Mac x86_64 builds
- Linux aarch64 builds
Support for these platforms will be added back in the future.
0.2.2
Oct 30, 2023
New Features
- Adding support for docker multi-platform builds. (#54)
Fixes
- Honoring Syft/SBOM configs during docker builds. (#84)
0.2.1
Oct 25, 2023
Fixes
- Component parameters can set config attributes. (#75)
0.2.0
Oct 20, 2023
New Features
Added a module so that most users can easily install complex configurations without editing any configuration information whatsoever. Modules can be loaded from https URLs or from the local file system. Our recipes will host modules on chalkdust.io.
Modules can have parameters that you provide when installing them, and can have arbitrary defaults (for instance, any module importing the module for connecting to our demo web server defaults to your current IP address).
We do extensive conflict checking to ensure that modules that are incompatible will not run (and generally won’t even load).
We will eventually do an in-app UI to browse and install modules. (#47) (#67)
Added initial metadata collection for GCP and Azure, along with a metadata key to provide the current cloud provider, and a key that distinguishes the cloud provider’s environments. Currently, this only does AWS (EKS, ECS, EC2). (#59) (#65)
Added OIDC token refreshing, along with
chalk loginandchalk logoutcommands to log out of auth for the secret manager. (#51) #55, #60)The initial rendering engine work was completed. This means
chalk help,chalk help metadataare fully functional. This engine is effectively most of the way to a web browser, and will enable us to offload a lot of the documentation, and do a little storefront (once we integrate in notcurses). (#58)If you’re doing multi-arch binary support, Chalk can now pass your native binary’s configuration to other arches, though it does currently re-install modules, so the original module locations need to be available.
Fixes
- Docker support when installed via
Snap. (#9) - Removes error log when using chalk on ARM Linux as chalk fully runs on ARM Linux now. (#7)
- When a
DockerfileusesUSERdirective, chalk can now wrap entrypoint in that image (docker.wrap_entrypoint = truein chalk config). (#34) - Segfault when running chalk operation (e.g.
insert) in empty git repo without any commits. (#39) - Sometimes Docker build would not wrap entrypoint. (#45)
- Cosign now only gets installed if needed. (#49)
- Docker
ENTRYPOINT/COMMANDwrapping now preserves all named arguments from originalENTRYPOINT/COMMAND. (e.g.ENTRYPOINT ["ls", "-la"]) (#70)
Known Issues
There are still embedded docs that need to be fixed now that the entire rendering engine is working well enough.
When a
Dockerfiledoes not use theUSERdirective but base image uses it to change default image user, chalk cannot wrap the image as it on legacy Docker builder (not buildx) as it will fail tochmodpermissions of chalk during the build.
0.1.2
Sept 26, 2023
This is the first open source release of Chalk. For those who participated in the public preview, there have been massive changes from those releases, based on your excellent feedback. There’s a summary of those changes below.
Known Issues
At release time, here are known issues:
Documentation
We have not yet produced any developer documentation. We will do so soon.
The in-command
helprenderer did not get finished before release. Everything should display, but the output will have some obvious problems (spacing, wrapping, formatting choices, etc). If it’s insufficient, use the online docs, which use the same core source material.
Containers
Our support for container marking is currently limited to Docker.
Chalk does not yet have any awareness of
docker compose,bakeor similar frameworks atop Docker. We only process containers created via direct docker invocation that’s wrapped by chalk.Similarly, Chalk does not yet capture any metadata around orchestration layers like Kubernetes or cloud-provider managed container solutions.
Chalk does not yet handle Docker HEREDOCs (which we’ve found aren’t yet getting heavy use).
Chalk currently will refuse to automatically wrap or sign multi-architecture builds. It still will produce the desired container with a chalk mark, however.
OS / Hardware support
We are not supporting running chalk on Windows at this time (even under WSL2).
In fact, Linux and Mac on the two major hardware architectures are the only platforms we are currently supporting. More Posix platforms may work, but we are making no effort there at this point.
Data collection and Marking
We currently do not handle any form of PE binaries, so do not chalk .NET or other Windows applications.
There are other platforms we hope to mark that we don’t yet support; see the roadmap section below.
Other
The bash autocomplete script installation a Mac, but because it’s not a zsh script, it will not autocomplete file arguments, etc.
The signing functionality does download the
cosignbinary if not present and needed; this can take a bit of time, and should eventually be replaced with a native in-toto implementation.Dy default, Chalk uses an advisory file lock to avoid overlapping writes to files by multiple chalk instances (particularly meant for protecting log files). This can lead to chalk instances giving up on obtaining the lock if you run multiple instances in the same environment at once.
Major changes since the preview releases
We’ve added automatic signing; run
chalk setup; if you create a free account for our secret service, it’ll generate a keypair for you, encrypt the private key, and automatically sign whenever possible. If you don’t want to use the service, you’ll have to provide a secret via environment variable, and should run setup with the--no-api-loginflag.We added automatic wrapping of container entry points, so that you can get beacon data when containers start up (via the
chalk execcommand).We’ve additionally added the ability to have
chalk execsend periodicheartbeatreports, so you can collect metadata about runtime workloads after startup.There were several config file format changes based on feedback. Please contact us if you want help migrating, but things are even easier now.
ELF Chalk marks are now put into their own ELF section in the binary, so they will survive a
stripoperation.We added / changed a number of metadata keys around Docker images and containers, and enhanced the interface for extracting data from containers.
We added an AWS IMDSv2 collection module, and associated metadata keys.
We added proc file system collection module.
We are now officially supporting ARM Linux builds and MacOS (arm and amd64) builds of Chalk.
You can inject environment variables into docker images (previously we only supported labels)
Linux builds will now always fully statically compile with MUSL-built shared libraries. On the Mac,
libcis still dynamically loaded.
Roadmap Items
We are actively developing Chalk, and listening closely to the people already using it. Below are a number of key items in our backlog that we’re considering. However, we have made no decisions on the order we’ll work on these things, and may add or drop items from the list. For a more up-to-date view, please check our issues list in GitHub.
All of the below are targets for our Open Source; we also will soon be releasing services around Chalk (with a free tier).
A TUI (using Python 3) to make it very easy to build custom configurations for most needs, without having to touch a configuration file.
On-demand data collection from runtime environments (via triggers).
Heartbeat reports should be more flexible, to only report when some sort of condition(s) is(/are) met (both per-metadata key, and per-report).
Many changes / enhancements to make to the underlying configuration file format to benefit Chalk and its users.
Data collection modules for other cloud providers.
Data collection modules for orchestration systems, particularly k8s.
A
chalk logcommand that can pretty-print (and search?) log entries from any readable source you configure (not just the default log file).Better handling for multi-architecture builds.
Wrapping / data collection for
docker composeanddocker bakeBetter OS X support (right now, it’s just good enough for us to develop on; Linux is the primary target)
More off-the-shelf integrations (including third party tools)
Support for CI/CD data collection modules that are longer-running (requiring them to work on a copy of the dev or build environment)
Chalk mark support for in-the-browser JavaScript (we have an approach we know works, we just need to build it out).
Better support for specific platforms for serverless apps.
Note that Windows support is not a priority for us currently. We’d love to get there eventually, but do not expect to get to it any time soon, unless contributed by the community.