Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
22c4b6a
feat: Add uv and tests
kevinwang5658 Apr 9, 2026
41080b3
feat: Add rbenv and tests
kevinwang5658 Apr 9, 2026
0fe6b9d
feat: Add rbenv and tests
kevinwang5658 Apr 11, 2026
2d030f6
feat: Fixed ollama tests
kevinwang5658 Apr 13, 2026
5b8b877
feat: Added new integration test for everything
kevinwang5658 Apr 13, 2026
a4d686c
feat: Test workflow by adding push
kevinwang5658 Apr 13, 2026
722b89f
fix: disable cron until I can get it to work
kevinwang5658 Apr 16, 2026
b36360b
feat: Added syncthing support
kevinwang5658 Apr 16, 2026
f18059f
fix: bug fixes
kevinwang5658 Apr 17, 2026
859a73a
fix: fixed syncthing bugs and fixed test runner bug
kevinwang5658 Apr 18, 2026
7a64b1b
feat: Add file based completions files. And moved the completions cro…
kevinwang5658 Apr 19, 2026
702913e
feat: Improved folder naming and added README documentation
kevinwang5658 Apr 19, 2026
7d07f6e
feat: Added completions for asdf
kevinwang5658 Apr 19, 2026
1489efc
feat: Added completions for apt
kevinwang5658 Apr 19, 2026
2f1e5db
feat: Added completions for npm and pip
kevinwang5658 Apr 19, 2026
d6fd648
feat: Added uv completions and rb completions and test completions sc…
kevinwang5658 Apr 19, 2026
f1a4d3c
feat: Changed npm install to a single string command instead of strin…
kevinwang5658 Apr 19, 2026
76fd562
feat: Added completions for ollama, pnpm and snap
kevinwang5658 Apr 19, 2026
f98fa38
feat: Modified the deploy script to deploy each resource directly to …
kevinwang5658 Apr 19, 2026
e0d498c
feat: Modified the deploy script to deploy each resource directly to …
kevinwang5658 Apr 19, 2026
b700393
feat: Modified the build script to build a metadata.json
kevinwang5658 Apr 19, 2026
f08ab8d
fix: Fix path and aliases imports
kevinwang5658 Apr 19, 2026
2b2b5d3
feat: Add support on db side for example and default parameters
kevinwang5658 Apr 20, 2026
afa7938
feat: Added example and defaults for path, aliases, ssh-config
kevinwang5658 Apr 20, 2026
dbd54fd
feat: Added alias resource and syncthing
kevinwang5658 Apr 20, 2026
78066a9
feat: Added asdf and aws
kevinwang5658 Apr 20, 2026
a2b69be
feat: Added apt, npm login, nvm and pnpm
kevinwang5658 Apr 20, 2026
dcbe194
breaking: Removed object option from apt. Split git-repository into s…
kevinwang5658 Apr 20, 2026
8c6d7b1
feat: Added homebrew, git, git-lfs, examples, aws-profile, aws-cli
kevinwang5658 Apr 20, 2026
900441a
feat: Added python tools
kevinwang5658 Apr 20, 2026
346cdc2
feat: Added action, package-managers, tart, terraform, ollama, and fi…
kevinwang5658 Apr 20, 2026
d8820c8
feat: Fixes jenv for linux
kevinwang5658 Apr 20, 2026
299fc3a
feat: Fixes testing harness for linux. Fix syncthing for linux
kevinwang5658 Apr 20, 2026
a49673c
fix: nvm test for now and moved nvm destroy out of npm-login and npm …
kevinwang5658 Apr 20, 2026
89d3443
fix: rbenv, terraform, aliases, apt, and snap
kevinwang5658 Apr 21, 2026
3fcb30c
fix: Fixed a bunch of resources not pre-installing curl and unzip if …
kevinwang5658 Apr 21, 2026
db95abf
fix: Fixes for docker and uv. Added global parameter for uv
kevinwang5658 Apr 21, 2026
c98f9bf
fix: Fixes for docker and pnpm. Improved python tests by switching to uv
kevinwang5658 Apr 21, 2026
58b8766
feat: improved run all test
kevinwang5658 Apr 21, 2026
e504ff8
feat: temp add push to test
kevinwang5658 Apr 21, 2026
0b43e20
Kevin/automated testing (#28)
kevinwang5658 Apr 23, 2026
83a01c1
Added testing change to enable tests for example and default configs.…
kevinwang5658 Apr 23, 2026
f9a0f6a
Fixes the distro not being in schema by adding to schema
kevinwang5658 Apr 23, 2026
d5d53fd
Update plugin lib library as well
kevinwang5658 Apr 23, 2026
f223b8b
Updated libs and fix error
kevinwang5658 Apr 23, 2026
7aff2b4
Disable test on push. Homebrew fixes
kevinwang5658 Apr 23, 2026
e3e20e4
Tap fix
kevinwang5658 Apr 23, 2026
f08a903
Omit system from nvm import
kevinwang5658 Apr 23, 2026
a027ec7
Switch homebrew back askpass
kevinwang5658 Apr 23, 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
55 changes: 55 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
version: 2.1

jobs:
test:
parameters:
executor:
type: executor
executor: << parameters.executor >>
steps:
- checkout
- node/install:
node-version: '24'
- run:
name: Enable linger for current user (Linux only)
command: |
if [[ "$OSTYPE" == "linux"* ]]; then
loginctl enable-linger $(whoami)
sudo chown -R circleci:circleci /usr/local /opt /var/tmp
fi
- run:
name: Install dependencies
command: npm ci
- run:
name: Clean up pre-installed tools
command: npx tsx scripts/cleanup-circleci.ts
no_output_timeout: 10m
- run:
name: Run tests
command: npm run test -- ./test --no-file-parallelism --disable-console-intercept
no_output_timeout: 30m

orbs:
node: circleci/node@6

executors:
linux-x86:
machine:
image: ubuntu-2404:current
resource_class: medium
linux-arm:
machine:
image: ubuntu-2404:current
resource_class: arm.medium
macos:
macos:
xcode: '26.4.0'
resource_class: m4pro.medium

#workflows:
# test-all:
# jobs:
# - test:
# matrix:
# parameters:
# executor: [linux-arm]
61 changes: 61 additions & 0 deletions .claude/commands/add-examples.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# add-examples

Add `defaultConfig` and `exampleConfigs` to a Codify resource.

## Instructions

The user will either pass a file path as an argument (`$ARGUMENTS`) or have a file open in the IDE. Read the resource file, then follow the rules below to add `defaultConfig` and `exampleConfigs`.

If `$ARGUMENTS` is provided, use that file path. Otherwise use the file the user has open.

### Step 1 — Read the resource

Read the resource file. Identify:
- The config interface/type (fields, which are required vs optional)
- `operatingSystems` declared in `getSettings()` — determines whether to add `os` to examples
- `dependencies` — used to decide whether to show a multi-resource example
- Any existing `defaultConfig` or `exampleConfigs` (update rather than duplicate)

If the schema is a separate JSON file, read it too.

Also check for sibling resources that are commonly used together (e.g. if this resource `dependsOn` another type, read that type's file to understand its config shape).

### Step 2 — Add `defaultConfig`

Rules:
- Type: `Partial<TheConfig>` (never include `os` — it's not on the typed config interface)
- For required fields with no sensible default: use the placeholder string `'<Replace me here!'>`
- For optional arrays that default to empty: set to `[]`
- Omit fields that are purely user-specific (paths, names, credentials)
- Use the tool's own documented defaults where applicable

### Step 3 — Add `exampleConfigs`

Rules:
- Up to two examples: `example1` and `example2`
- **No trivial examples** — every example must have meaningful configuration, not just `{ type: 'foo' }` with no parameters
- `example1`: the most common real-world use case with substantive config values
- `example2`: a more advanced variant OR a multi-resource example showing full end-to-end setup; multi-resource is preferred when the resource `dependsOn` another
- Every example needs a `title` (short noun-phrase) and a `description` (one sentence)
- Use realistic placeholder values for sensitive fields (`'<Replace me here!'>`), not real credentials
- Do not add step-numbering in descriptions

**`os` field in examples:**
- The `os` field values come from the `ResourceOs` enum in `@codifycli/schemas` (`../codify-schemas/src/types/index.ts`): `'macOS'`, `'linux'`, `'windows'`
- Add `os` to config entries inside examples only when `operatingSystems` is restricted to a single OS (e.g. Darwin-only → `os: ['macOS']`, Linux-only → `os: ['linux']`)
- Skip `os` entirely when the resource supports both Darwin and Linux

**Shared examples:**
- When a multi-resource example is used across multiple related resources (e.g. asdf + asdf-plugin + asdf-install), define it once in a shared `examples.ts` file in the resource folder and spread it in with `...exampleSharedConfigs`

### Step 4 — Import `ExampleConfig`

Add `ExampleConfig` to the existing `@codifycli/plugin-core` import if not already present.

### Step 5 — Register in `getSettings()`

Add `defaultConfig` and `exampleConfigs` fields inside the object returned by `getSettings()`, before `operatingSystems`.

## Output format

Make all edits directly to the file. Do not summarise every line changed — just briefly confirm what was added.
47 changes: 0 additions & 47 deletions .fleet/run.json

This file was deleted.

3 changes: 0 additions & 3 deletions .fleet/settings.json

This file was deleted.

30 changes: 30 additions & 0 deletions .github/workflows/claude-fixer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Claude Test Fixer
on:
workflow_run:
workflows: ["Test all cron (Linux)", "Test all cron (MacOS)"]
types: [completed]

jobs:
fix-on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
permissions:
contents: write
pull-requests: write
actions: read # Allows Claude to read the logs of the failed run
steps:
- uses: actions/checkout@v4
- name: Claude Fix Failed Tests
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
prompt: |
The "CI Tests" workflow just failed.
1. Analyze the logs from the last failed run.
2. Identify the root cause of the test failure.
3. Implement a fix and create a new pull request.



additional_permissions: |
actions: read
46 changes: 46 additions & 0 deletions .github/workflows/run-all-tests-cron-linux.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs

name: Test all cron (Linux)

on:
# push:
pull_request:
branches:
- release
schedule:
- cron: '0 0 * * *' # Every day at midnight UTC
workflow_dispatch:

jobs:
build-and-test:
runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
# os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest]
shard: ["1/20", "2/20", "3/20", "4/20", "5/20", "6/20", "7/20", "8/20", "9/20", "10/20", "11/20", "12/20", "13/20", "14/20", "15/20", "16/20", "17/20", "18/20", "19/20", "20/20"]

steps:
- uses: actions/checkout@v4
- name: Use Node.js 24
uses: actions/setup-node@v4
with:
node-version: '24.x'
cache: 'npm'
- name: Enable linger for admin user (Linux only)
if: runner.os == 'Linux'
run: loginctl enable-linger $(whoami)

- run: npm ci
- run: npx tsx scripts/cleanup-github-actions.ts

# - name: Setup tmate session
# uses: mxschmitt/action-tmate@v3

- name: Run tests (Linux)
if: runner.os == 'Linux'
run: npm run test -- ./test --no-file-parallelism --disable-console-intercept --shard ${{ matrix.shard }}

55 changes: 55 additions & 0 deletions .github/workflows/run-all-tests-cron-macos.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs

name: Test all cron (MacOS)

on:
# push:
pull_request:
branches:
- release
schedule:
- cron: '0 0 * * *' # Every day at midnight UTC
workflow_dispatch:

jobs:
build-and-test:
runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
os: [macos-latest]
# os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest]
shard: ["1/5", "2/5", "3/5", "4/5", "5/5"]

steps:
- uses: actions/checkout@v4
- name: Use Node.js 24
uses: actions/setup-node@v4
with:
node-version: '24.x'
cache: 'npm'

- run: npm ci
- run: npx tsx scripts/cleanup-github-actions.ts

# - name: Setup tmate session
# uses: mxschmitt/action-tmate@v3

- name: Run tests (macOS - zsh login shell)
if: runner.os == 'macOS'
shell: zsh {0}
run: |
sudo chsh -s $(which zsh) $USER
echo $0

echo $ZSH_NAME $ZSH_VERSION
export SHELL=/bin/zsh
touch ~/.zshrc
unset JAVA_HOME
export PATH=/Users/runner/.local/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/opt/curl/bin:/usr/local/bin:/usr/local/sbin:/Users/runner/bin:/usr/bin:/bin:/usr/sbin:/sbin
export CI=true

npm run test -- ./test --no-file-parallelism --disable-console-intercept --exclude ./test/homebrew --shard ${{ matrix.shard }}

2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,5 @@
node_modules
oclif.manifest.json
.env
.dev.vars
*.vars
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="test:integration:dev -- $FilePathRelativeToProjectRoot$" type="js.build_tools.npm" nameIsGenerated="true">
<configuration default="false" name="test:integration:dev -- $FilePathRelativeToProjectRoot$" type="js.build_tools.npm">
<package-json value="$PROJECT_DIR$/package.json" />
<command value="run" />
<scripts>
Expand Down
Loading
Loading