Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
60eb942
Format files for hk checks
nnutter Oct 31, 2026
b3f6795
Remove golangci-lint configuration
nnutter Nov 1, 2026
1e38e79
Use the latest Go toolchain
nnutter Oct 31, 2026
f9f61bb
Upgrade Go tool dependencies to latest
nnutter Oct 31, 2026
36c5166
Standardize Git hooks on hk
nnutter Oct 31, 2026
fb09d1c
Use hk task names for fix, check, and test
nnutter Nov 1, 2026
cd74f91
Refactor: Provide the hk tools from mise
nnutter Nov 1, 2026
e92a3b7
Upgrade hk to 2.10.0
nnutter Nov 1, 2026
c91550c
Use hk-config builtins for the hk steps
nnutter Nov 1, 2026
5a1ae16
Bump the CI mise version past the hk registry entry
nnutter Nov 2, 2026
4c236c3
Pin the GitHub Actions to their latest releases
nnutter Nov 2, 2026
43f1fb4
Run CI with mise 2026.10.25
nnutter Nov 2, 2026
bd52a37
Pin the runner images
nnutter Nov 2, 2026
300ba69
Ignore coverage artifacts
nnutter Nov 2, 2026
ca0501e
Align the tap workflow with the other repositories
nnutter Nov 2, 2026
000a855
Use Go 1.27.3 in go.mod
nnutter Nov 2, 2026
305dd5e
Standardize the ignore list
nnutter Nov 2, 2026
1463179
Run the agent tasks on start and stop
nnutter Nov 2, 2026
487e574
Refactor: Sort the tools and hk steps
nnutter Nov 2, 2026
af0f157
Add a roam skill
nnutter Nov 2, 2026
76d2770
Refactor: Remove the cover task alias
nnutter Nov 2, 2026
bbf55e6
Check trailing whitespace and final newlines
nnutter Nov 2, 2026
e1c35b7
Refactor: Name the security steps after their builtins
nnutter Nov 2, 2026
3134545
Match the mise task file to the constable repository
nnutter Nov 2, 2026
22a1eea
Use hk-config v2.10.0-4
nnutter Nov 2, 2026
9d65c64
Validate skills with the skills_ref builtin
nnutter Nov 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 9 additions & 21 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -1,56 +1,44 @@
name: CI

on:
pull_request:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
validation:
runs-on: ubuntu-latest
runs-on: ubuntu-26.04
timeout-minutes: 15
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
persist-credentials: false

- name: Install mise
uses: jdx/mise-action@3c2e0cf82a5b2e5249f0d3635a4d83d0ae861518 # v4.2.5
uses: jdx/mise-action@6612f0ef07ed2a736cd1e00a94a065522dd41195 # v5.2.5
with:
version: 2026.8.5

- name: Run fixers
run: mise run fixers

- name: Run govulncheck
run: mise run lint-govulncheck

version: 2026.10.25
- name: Run check
run: mise run check
test:
runs-on: ${{ matrix.os }}
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
os: [ubuntu-26.04, macos-26]
steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
persist-credentials: false

- name: Install mise
uses: jdx/mise-action@3c2e0cf82a5b2e5249f0d3635a4d83d0ae861518 # v4.2.5
uses: jdx/mise-action@6612f0ef07ed2a736cd1e00a94a065522dd41195 # v5.2.5
with:
version: 2026.8.5

version: 2026.10.25
- name: Run tests
run: mise run ci-tests
run: mise run ci-test
19 changes: 3 additions & 16 deletions .github/workflows/update-tap.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
name: Update Tap

on:
release:
types: [published]
Expand All @@ -9,16 +8,13 @@ on:
description: Release tag to publish to nnutter/homebrew-tap
required: true
type: string

permissions: {}

concurrency:
group: update-homebrew-formula
group: update-tap
cancel-in-progress: false

jobs:
update-formula:
runs-on: ubuntu-latest
runs-on: ubuntu-26.04
timeout-minutes: 15
env:
FORMULA_NAME: roam
Expand All @@ -41,25 +37,22 @@ jobs:
exit 1
fi
echo "tag=$tag" >> "$GITHUB_OUTPUT"

- name: Generate a token
id: app-token
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
uses: actions/create-github-app-token@64ab729a6294000f5aa4a4bc0b73d1f32bc45510 # v3.3.0
with:
client-id: ${{ vars.APP_CLIENT_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: ${{ env.TAP_OWNER }}
repositories: ${{ env.TAP_REPOSITORY }}
permission-contents: write
permission-pull-requests: write

- name: Check out the tap
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
repository: ${{ env.TAP_OWNER }}/${{ env.TAP_REPOSITORY }}
token: ${{ steps.app-token.outputs.token }}
persist-credentials: false

- name: Skip when the formula already uses this tag
id: needed
env:
Expand All @@ -72,7 +65,6 @@ jobs:
else
echo "needed=true" >> "$GITHUB_OUTPUT"
fi

- name: Configure git for the app
if: steps.needed.outputs.needed == 'true'
env:
Expand All @@ -82,20 +74,17 @@ jobs:
user_id="$(gh api "/users/${APP_SLUG}[bot]" --jq .id)"
git config user.name "${APP_SLUG}[bot]"
git config user.email "${user_id}+${APP_SLUG}[bot]@users.noreply.github.com"

- name: Create the formula branch
if: steps.needed.outputs.needed == 'true'
env:
BRANCH_NAME: formula-updates/${{ env.FORMULA_NAME }}-${{ steps.release.outputs.tag }}
run: git switch --create "$BRANCH_NAME"

- name: Update the formula
if: steps.needed.outputs.needed == 'true'
env:
FORMULA_NAME: ${{ env.FORMULA_NAME }}
TAG: ${{ steps.release.outputs.tag }}
run: bin/update-formula "$FORMULA_NAME" "$TAG"

- name: Push the formula branch
if: steps.needed.outputs.needed == 'true'
env:
Expand All @@ -107,7 +96,6 @@ jobs:
git push --force-with-lease \
"https://x-access-token:${GH_TOKEN}@github.com/${TAP_OWNER}/${TAP_REPOSITORY}.git" \
"HEAD:refs/heads/${BRANCH_NAME}"

- name: Open a pull request
if: steps.needed.outputs.needed == 'true'
env:
Expand Down Expand Up @@ -139,7 +127,6 @@ jobs:
--head "$BRANCH_NAME" \
--base "$(gh repo view "$tap" --json defaultBranchRef --jq .defaultBranchRef.name)" \
--body "Update ${FORMULA_NAME} to ${TAG} from ${UPSTREAM_REPOSITORY}."

- name: Enable auto-merge
if: steps.needed.outputs.needed == 'true'
env:
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.idea/
.tmp/
/roam
coverage.html
coverage.out
tmp/
9 changes: 0 additions & 9 deletions .golangci.yml

This file was deleted.

22 changes: 12 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Way back when I realized I could reasonably manage my dotfiles just using `git`
One caveat is that it's a little hard to tell what is or isn't managed.
However, it's not too hard to check specific locations, e.g.,

```
```bash
roam status --untracked-files -- ~/bin
```

Expand All @@ -16,18 +16,20 @@ My one slight annoyance is the manual set up required for a new host/account whi
## Installation

1. Install Git.
2. Setup Git access to GitHub.
3. Install roam,

```
go install github.com/nnutter/roam@latest
```
1. Setup Git access to GitHub.

1. Install roam,

```bash
go install github.com/nnutter/roam@latest
```

4. Setup roam,
1. Setup roam,

```
roam setup -r <repo> -b <branch>
```
```bash
roam setup -r <repo> -b <branch>
```

## Shell Completion

Expand Down
5 changes: 4 additions & 1 deletion command.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,8 @@ func isVersionArg(args []string) bool {
}

func isGitVersionArg(args []string) bool {
return len(args) == 1 && args[0] == "--git-version"
if len(args) != 1 {
return false
}
return args[0] == "--git-version"
}
Loading
Loading