{"id":29210625,"url":"https://github.com/embarkstudios/buildkite-jobify","last_synced_at":"2025-07-02T21:07:18.876Z","repository":{"id":44616709,"uuid":"181430460","full_name":"EmbarkStudios/buildkite-jobify","owner":"EmbarkStudios","description":"👷 Kubekite, but in Rust, using configuration from your repos 🦀","archived":false,"fork":false,"pushed_at":"2023-03-28T08:49:31.000Z","size":268,"stargazers_count":24,"open_issues_count":5,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-07-01T00:44:30.752Z","etag":null,"topics":["buildkite","rust"],"latest_commit_sha":null,"homepage":"http://embark.rs","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EmbarkStudios.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-15T07:01:03.000Z","updated_at":"2024-12-02T22:25:15.000Z","dependencies_parsed_at":"2024-11-15T05:16:26.090Z","dependency_job_id":null,"html_url":"https://github.com/EmbarkStudios/buildkite-jobify","commit_stats":{"total_commits":42,"total_committers":8,"mean_commits":5.25,"dds":0.2857142857142857,"last_synced_commit":"a1b953b03f3330e499b1af47cc2dc38bd777da7c"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/EmbarkStudios/buildkite-jobify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmbarkStudios%2Fbuildkite-jobify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmbarkStudios%2Fbuildkite-jobify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmbarkStudios%2Fbuildkite-jobify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmbarkStudios%2Fbuildkite-jobify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EmbarkStudios","download_url":"https://codeload.github.com/EmbarkStudios/buildkite-jobify/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmbarkStudios%2Fbuildkite-jobify/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263215299,"owners_count":23431895,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["buildkite","rust"],"created_at":"2025-07-02T21:07:18.089Z","updated_at":"2025-07-02T21:07:18.854Z","avatar_url":"https://github.com/EmbarkStudios.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# `👷 buildkite-jobify`\n\n[![Embark](https://img.shields.io/badge/embark-open%20source-blueviolet.svg)](https://embark.dev)\n[![Embark](https://img.shields.io/badge/discord-ark-%237289da.svg?logo=discord)](https://discord.gg/dAuKfZS)\n[![dependency status](https://deps.rs/repo/github/EmbarkStudios/buildkite-jobify/status.svg)](https://deps.rs/repo/github/EmbarkStudios/buildkite-jobify)\n[![Build status](https://github.com/EmbarkStudios/buildkite-jobify/workflows/CI/badge.svg)](https://github.com/EmbarkStudios/buildkite-jobify/actions)\n\nWatches 1 or more Buildkite pipelines via the GraphQL API to kick off temporary Kubernetes jobs that (presumably)\nspin up Buildkite agents to pick up the Buildkite jobs that Buildkite has scheduled but not yet found an agent for.\n\n\u003c/div\u003e\n\n## Repository Setup\n\nThe configuration of the Kubernetes jobs specs and the which agent tags correspond to them are expected to be\nstored in the repositories that the pipelines are attached to, thus keeping the CI configuration within that repository.\n\nThe pipeline upload job for your repository should create a gzipped tarball of your configuration and upload it before adding the rest of the pipeline's steps so that the program can download the exact configuration for the commit being built.\n\nHere is an example bash script, intended to work in an Alpine Linux container.\n\n```sh\n#!/bin/bash\nset -eu\n\necho \"--- :aws-artifact: Uploading Jobify templates\"\narchive=\"jobify.tar.gz\"\n\n# Create a tarball of our jobify files\ntar c -zf \"$archive\" -C .ci/jobify .\n\n# Checksum the tarball and use that as our key\nchksum=$(sha1sum $archive | awk '{ print $1 }')\n\n# TODO: Just support CAS artifacts, and only upload unique ones (but maybe buildkite already does?)\n\n# Upload the tarball as a Buildkite artifact\nbuildkite-agent artifact upload \"$archive\" \u0026\u003e upload_out\nrm \"$archive\"\n\nupload_info=$(cat upload_out)\n\n# Buildkite doesn't seem to have a convenient way to know the ID assigned to the artifact\n# so just cheat and parse its output for now\nrx='Uploading\\sartifact\\s([0-9a-f-]{36})\\sjobify\\.tar\\.gz'\nif [[ \"$upload_info\" =~ $rx ]]; then\n    # Set a metadata key to point to the archive we uploaded so that jobify can pick it up\n    buildkite-agent meta-data set \"jobify-artifact-id\" \"${BASH_REMATCH[1]}\"\n    # Set the chksum so we can avoid an additional lookup if jobify already has the data\n    buildkite-agent meta-data set \"jobify-artifact-chksum\" \"$chksum\"\nelse\n    echo \"Failed to upload jobify configuration\"\n    exit 1\nfi\n\necho \"--- Uploading :pipeline:\"\n# Upload our main pipeline to kick off the rest of the build\nbuildkite-agent pipeline upload \"$(dirname \"$0\")/pipeline.yml\"\n```\n\n## Contributing\n\n[![Contributor Covenant](https://img.shields.io/badge/contributor%20covenant-v1.4-ff69b4.svg)](CODE_OF_CONDUCT.md)\n\nWe welcome community contributions to this project.\n\nPlease read our [Contributor Guide](CONTRIBUTING.md) for more information on how to get started.\n\n## License\n\nLicensed under either of\n\n* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n* MIT license ([LICENSE-MIT](LICENSE-MIT) or \u003chttp://opensource.org/licenses/MIT\u003e)\n\nat your option.\n\n### Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally\nsubmitted for inclusion in the work by you, as defined in the Apache-2.0\nlicense, shall be dual licensed as above, without any additional terms or\nconditions.  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fembarkstudios%2Fbuildkite-jobify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fembarkstudios%2Fbuildkite-jobify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fembarkstudios%2Fbuildkite-jobify/lists"}