programmatic subagents
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: add git-cliff config and release workflow

+157
+114
.github/workflows/release.yml
··· 1 + name: Release 2 + on: 3 + push: 4 + tags: ["v*"] 5 + 6 + permissions: 7 + contents: write 8 + 9 + jobs: 10 + build: 11 + strategy: 12 + matrix: 13 + include: 14 + - os: macos-latest 15 + bottle_tag: arm64_sequoia 16 + - os: macos-13 17 + bottle_tag: ventura 18 + - os: ubuntu-latest 19 + bottle_tag: x86_64_linux 20 + runs-on: ${{ matrix.os }} 21 + steps: 22 + - uses: actions/checkout@v4 23 + - uses: oven-sh/setup-bun@v2 24 + - run: bun install --frozen-lockfile 25 + - name: Compile binary 26 + run: bun build --compile packages/cli/src/bin/mill.ts --outfile mill 27 + - name: Package bottle 28 + run: | 29 + VERSION=${GITHUB_REF_NAME#v} 30 + mkdir -p "mill/${VERSION}/bin" 31 + cp mill "mill/${VERSION}/bin/" 32 + tar czf "mill-${VERSION}.${{ matrix.bottle_tag }}.bottle.tar.gz" "mill/${VERSION}/" 33 + - uses: actions/upload-artifact@v4 34 + with: 35 + name: bottle-${{ matrix.bottle_tag }} 36 + path: "*.bottle.tar.gz" 37 + 38 + release: 39 + needs: build 40 + runs-on: ubuntu-latest 41 + steps: 42 + - uses: actions/checkout@v4 43 + with: 44 + fetch-depth: 0 45 + - uses: actions/download-artifact@v4 46 + with: 47 + merge-multiple: true 48 + - name: Generate changelog 49 + uses: orhun/git-cliff-action@v4 50 + id: changelog 51 + with: 52 + args: --latest --strip header 53 + env: 54 + OUTPUT: CHANGELOG.md 55 + - name: Create release 56 + uses: softprops/action-gh-release@v2 57 + with: 58 + body_path: CHANGELOG.md 59 + files: "*.bottle.tar.gz" 60 + 61 + update-tap: 62 + needs: release 63 + runs-on: ubuntu-latest 64 + steps: 65 + - uses: actions/download-artifact@v4 66 + with: 67 + merge-multiple: true 68 + - name: Update homebrew formula 69 + env: 70 + GH_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN }} 71 + run: | 72 + VERSION=${GITHUB_REF_NAME#v} 73 + SOURCE_SHA=$(curl -sL "https://github.com/laulauland/mill/archive/refs/tags/v${VERSION}.tar.gz" | shasum -a 256 | cut -d' ' -f1) 74 + ARM64_SHA=$(shasum -a 256 "mill-${VERSION}.arm64_sequoia.bottle.tar.gz" | cut -d' ' -f1) 75 + X86_MAC_SHA=$(shasum -a 256 "mill-${VERSION}.ventura.bottle.tar.gz" | cut -d' ' -f1) 76 + LINUX_SHA=$(shasum -a 256 "mill-${VERSION}.x86_64_linux.bottle.tar.gz" | cut -d' ' -f1) 77 + 78 + cat > /tmp/mill.rb << RUBY 79 + class Mill < Formula 80 + desc "A runtime for executing TypeScript programs that can spawn agents" 81 + homepage "https://github.com/laulauland/mill" 82 + url "https://github.com/laulauland/mill/archive/refs/tags/v${VERSION}.tar.gz" 83 + sha256 "${SOURCE_SHA}" 84 + license "MIT" 85 + 86 + bottle do 87 + root_url "https://github.com/laulauland/mill/releases/download/v${VERSION}" 88 + sha256 arm64_sequoia: "${ARM64_SHA}" 89 + sha256 ventura: "${X86_MAC_SHA}" 90 + sha256 x86_64_linux: "${LINUX_SHA}" 91 + end 92 + 93 + depends_on "bun" => :build 94 + 95 + def install 96 + system "bun", "install", "--frozen-lockfile" 97 + system "bun", "build", "--compile", "packages/cli/src/bin/mill.ts", "--outfile", "mill" 98 + bin.install "mill" 99 + end 100 + 101 + test do 102 + assert_match "mill", shell_output("#{bin}/mill --help") 103 + end 104 + end 105 + RUBY 106 + 107 + sed -i 's/^ //' /tmp/mill.rb 108 + 109 + EXISTING_SHA=$(gh api repos/laulauland/homebrew-tap/contents/Formula/mill.rb --jq '.sha') 110 + gh api repos/laulauland/homebrew-tap/contents/Formula/mill.rb \ 111 + --method PUT \ 112 + --field message="mill ${VERSION}" \ 113 + --field content="$(base64 -w0 /tmp/mill.rb)" \ 114 + --field sha="${EXISTING_SHA}"
+18
AGENTS.md
··· 16 16 17 17 - Respect file boundary naming (`public/*.api.ts`, `domain/*.schema.ts`, `internal/runtime/*.effect.ts`). 18 18 - Use only public package exports across packages. 19 + 20 + ## Commits 21 + 22 + Use conventional commits. The changelog is generated from these prefixes: 23 + - `feat:` / `fix:` / `refactor:` / `perf:` / `docs:` / `chore:` / `style:` 24 + - Scoped prefixes are fine: `feat(core): add persistence layer` 25 + - `chore(release):` and `release:` commits are excluded from the changelog 26 + 27 + ## Releasing 28 + 29 + Binary: `mill`. CLI entrypoint: `packages/cli/src/bin/mill.ts`. Version lives in `packages/cli/package.json`. 30 + 31 + To cut a release: 32 + 1. Bump version in `packages/cli/package.json`, commit: `chore(release): vX.Y.Z` 33 + 2. Push to main, then tag and push: `git tag vX.Y.Z && git push origin vX.Y.Z` 34 + 3. CI compiles standalone binaries via `bun build --compile`, generates changelog, creates GitHub release, and updates the Homebrew formula in `laulauland/homebrew-tap` 35 + 36 + Requires `TAP_GITHUB_TOKEN` repo secret (PAT with write access to `laulauland/homebrew-tap`).
+25
cliff.toml
··· 1 + [changelog] 2 + body = """ 3 + {% for group, commits in commits | group_by(attribute="group") %} 4 + ### {{ group | upper_first }} 5 + {% for commit in commits %} 6 + - {{ commit.message | split(pat="\n") | first }} 7 + {%- endfor %} 8 + {% endfor %} 9 + """ 10 + trim = true 11 + 12 + [git] 13 + conventional_commits = true 14 + filter_unconventional = true 15 + commit_parsers = [ 16 + { message = "^feat", group = "Features" }, 17 + { message = "^fix", group = "Bug Fixes" }, 18 + { message = "^refactor", group = "Refactor" }, 19 + { message = "^perf", group = "Performance" }, 20 + { message = "^chore\\(release\\)", skip = true }, 21 + { message = "^release", skip = true }, 22 + { message = "^chore", group = "Miscellaneous" }, 23 + { message = "^doc", group = "Documentation" }, 24 + { message = "^style", group = "Styling" }, 25 + ]