{"id":30615631,"url":"https://github.com/alexfalkowski/bin","last_synced_at":"2026-06-03T06:01:23.603Z","repository":{"id":37033844,"uuid":"493833140","full_name":"alexfalkowski/bin","owner":"alexfalkowski","description":"A place for common executables.","archived":false,"fork":false,"pushed_at":"2026-05-25T14:35:16.000Z","size":575,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-05-25T16:30:14.781Z","etag":null,"topics":["bash","docker","ruby"],"latest_commit_sha":null,"homepage":"https://alexfalkowski.github.io/bin","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexfalkowski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2022-05-18T21:39:31.000Z","updated_at":"2026-05-25T14:35:20.000Z","dependencies_parsed_at":"2025-12-19T02:02:27.033Z","dependency_job_id":null,"html_url":"https://github.com/alexfalkowski/bin","commit_stats":null,"previous_names":[],"tags_count":278,"template":false,"template_full_name":null,"purl":"pkg:github/alexfalkowski/bin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexfalkowski%2Fbin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexfalkowski%2Fbin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexfalkowski%2Fbin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexfalkowski%2Fbin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexfalkowski","download_url":"https://codeload.github.com/alexfalkowski/bin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexfalkowski%2Fbin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33707328,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["bash","docker","ruby"],"created_at":"2025-08-30T08:06:08.848Z","updated_at":"2026-05-30T20:00:55.980Z","avatar_url":"https://github.com/alexfalkowski.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CircleCI](https://circleci.com/gh/alexfalkowski/bin.svg?style=shield)](https://circleci.com/gh/alexfalkowski/bin)\n[![Stability: Active](https://masterminds.github.io/stability/active.svg)](https://masterminds.github.io/stability/active.html)\n\n# bin\n\nA collection of shared **executables** and **Makefile includes** intended to be reused across projects (typically as a Git submodule checked out at `./bin`).\n\nThis repo contains:\n\n- reusable `build/make/*.mak` fragments (Go/Ruby/proto helpers)\n- small Bash/Ruby scripts under `build/` and `quality/`\n- shared agent skills and references under `skills/`\n- a Dockerfile template for building Go services (`build/docker/go/Dockerfile`)\n\n## Rationale\n\nAfter repeating the same build/lint/test/CI glue across projects, it’s useful to standardize it once and reuse it.\n\n## Repository layout\n\n| Path            | What it contains                                                                  |\n|-----------------|------------------------------------------------------------------------------------|\n| `build/make/`   | Makefile include fragments (Go, Ruby, git workflow, buf/proto, project templates). |\n| `build/go/`     | Go-related helper scripts (`lint`, `clean`, `fa`).                                 |\n| `build/docker/` | Docker helpers and `build/docker/go/Dockerfile`.                                   |\n| `build/sec/`    | Security scanning helpers (Trivy).                                                 |\n| `quality/`      | Quality/test helpers (Go coverage processing, cucumber wrappers).                  |\n| `skills/`       | Shared agent skills and references.                                                |\n\n## Using this repo (recommended: Git submodule)\n\nMost make fragments invoke scripts via `$(PWD)/bin/...`, so the intended usage is:\n\n- your project has this repo checked out at `./bin`\n- your project `Makefile` includes one or more fragments from `./bin/build/make/*.mak`\n\nExample:\n\n```bash\ngit submodule add git@github.com:alexfalkowski/bin.git bin\ngit submodule update --init\n```\n\n### Agent skill setup\n\nThis repo also ships shared agent guidance in focused skills under `skills/`. In downstream repositories, add a short pointer to the root `AGENTS.md` so agents discover the canonical shared guidance from the project root without copying the whole skill list:\n\n```markdown\n## Shared skills\n\nThis repository uses the shared skills from `bin/skills/`. Read\n`bin/AGENTS.md` for the canonical shared skill list and use the smallest\nmatching skill for the task.\n```\n\nKeeping only this pointer in downstream repos avoids repeating the shared skill\nlist. Update `bin/AGENTS.md` when the shared skill set changes.\n\n## Makefile includes (examples)\n\n### Ruby-only project\n\n```make\ninclude bin/build/make/help.mak\ninclude bin/build/make/ruby.mak\n```\n\nThis gives you targets like:\n\n- `make dep` (bundler install into `vendor/bundle`)\n- `make lint` / `make fix-lint` / `make format` (rubocop)\n- `make features` / `make benchmarks` (cucumber wrappers)\n\n### Go project\n\n```make\ninclude bin/build/make/help.mak\ninclude bin/build/make/go.mak\n```\n\nThis gives you targets like:\n\n- `make dep` (download/tidy/vendor)\n- `make lint` / `make fix-lint` / `make format`\n- `make specs` (gotestsum + race + coverage written under `test/reports/`)\n- `make coverage` (HTML + func coverage from `test/reports/final.cov`)\n- `make sec` (govulncheck + Trivy repo scan)\n\n### Git workflow helpers\n\n```make\ninclude bin/build/make/git.mak\n```\n\nThis adds convenience targets such as `make new-feature name=\u003csomething\u003e`, `make sync`, and `make optimise`.\n\n## Executables and helpers (examples)\n\n### Go coverage helpers\n\n- `quality/go/covfilter` filters `test/reports/profile.cov` into `test/reports/final.cov` using an exclude regex.\n  - Default exclude is `test` unless `.gocov` exists.\n- `quality/go/covmerge` filters each `test/reports/*.cov` into `test/reports/filter/` and merges them into `test/reports/final.cov`.\n  - Default exclude is `test|.pb|main.go` unless `.gocov` exists.\n\n### Cucumber wrappers\n\n- `quality/ruby/feature` runs cucumber with the `report` profile and excludes `@benchmark`.\n- `quality/ruby/benchmark` runs only `@benchmark` scenarios.\n\nThese are used by `build/make/ruby.mak` targets `features` and `benchmarks`.\n\n### Docker helpers\n\n- `build/docker/go/Dockerfile` is a multi-stage Dockerfile to build a Go binary and copy it into a distroless image.\n- `build/docker/build` builds a **test** image tagged `alexfalkowski/\u003cname\u003e:test.\u003cplatform\u003e`.\n- `build/docker/push` and `build/docker/manifest` are gated: they only run if `APP_VERSION_FILE` exists (default: `/tmp/workspace/release-version.txt`).\n\n### Local environment helper\n\n`build/docker/env` is a convenience wrapper for a sibling checkout of `../docker`:\n\n- if `../docker` exists, it updates it via `git pull --rebase` and updates submodules\n- otherwise, it tries to `git clone git@github.com:alexfalkowski/docker.git` (SSH)\n\nIt then runs `(cd ../docker \u0026\u0026 make kind=deps \u003ccommand\u003e)`.\n\n## Working on this repo\n\nList available targets:\n\n```bash\nmake\n```\n\nCommon checks used in CI (`.circleci/config.yml`):\n\n```bash\nmake dep\nmake clean-dep\nmake scripts-lint\nmake docker-lint\nmake lint\nmake sec-lint\n```\n\n## CircleCI note\n\nCircleCI jobs in this repo explicitly run `git submodule sync` / `git submodule update --init` because submodules require extra handling in CI (see `.circleci/config.yml`).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexfalkowski%2Fbin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexfalkowski%2Fbin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexfalkowski%2Fbin/lists"}