{"id":37325077,"url":"https://github.com/arclabs-studio/arcdevtools","last_synced_at":"2026-04-01T20:40:27.271Z","repository":{"id":324220358,"uuid":"1096440171","full_name":"arclabs-studio/ARCDevTools","owner":"arclabs-studio","description":"Reusable package with development tools for ARCLabs apps — Implementing SwiftLint, SwiftFormat, scripts, hooks, templates, documentation and macros","archived":false,"fork":false,"pushed_at":"2026-02-24T15:21:52.000Z","size":215,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-24T18:40:19.193Z","etag":null,"topics":["documentation","hooks","ios","macros","modular","reusable","scripts","swiftformat","swiftlint","templates"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/arclabs-studio.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":null,"dco":null,"cla":null}},"created_at":"2025-11-14T12:34:10.000Z","updated_at":"2026-02-24T15:22:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/arclabs-studio/ARCDevTools","commit_stats":null,"previous_names":["arclabs-studio/arcdevtools"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/arclabs-studio/ARCDevTools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arclabs-studio%2FARCDevTools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arclabs-studio%2FARCDevTools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arclabs-studio%2FARCDevTools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arclabs-studio%2FARCDevTools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arclabs-studio","download_url":"https://codeload.github.com/arclabs-studio/ARCDevTools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arclabs-studio%2FARCDevTools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29958454,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T01:47:18.291Z","status":"online","status_checked_at":"2026-03-01T02:00:07.437Z","response_time":124,"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":["documentation","hooks","ios","macros","modular","reusable","scripts","swiftformat","swiftlint","templates"],"created_at":"2026-01-16T03:27:48.073Z","updated_at":"2026-04-01T20:40:27.256Z","avatar_url":"https://github.com/arclabs-studio.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🛠️ ARCDevTools\n\n![Version](https://img.shields.io/badge/Version-2.5.0-blue.svg)\n![License](https://img.shields.io/badge/License-MIT-green.svg)\n![Swift](https://img.shields.io/badge/Swift-6.0-orange.svg)\n![Platforms](https://img.shields.io/badge/Platforms-macOS%20%7C%20iOS-blue.svg)\n\n**Centralized quality tooling for ARC Labs Studio**\n\nOne command installs SwiftLint, SwiftFormat, git hooks, CI/CD workflows, and Claude Code skills into any ARC Labs project.\n\n---\n\n## 🎯 Overview\n\nARCDevTools standardizes development tooling across all ARC Labs projects. Add it as a git submodule, run the setup script, and your project gets:\n\n- **SwiftLint** — 40+ rules aligned with [ARCKnowledge](https://github.com/arclabs-studio/ARCKnowledge) standards\n- **SwiftFormat** — Consistent formatting (4 spaces, 120 chars, same-line attributes)\n- **Git Hooks** — Pre-commit (format + lint) and pre-push (tests)\n- **Makefile** — `make lint`, `make format`, `make test`, and more\n- **CI/CD Workflows** — GitHub Actions templates for quality, testing, and releases\n- **Claude Code Skills** — 11 ARCKnowledge skills + package validator, auto-installed via symlinks\n\n### Supported Project Types\n\n| Type | Detection | Build | Test |\n|------|-----------|-------|------|\n| **Swift Package** | `Package.swift` present | `swift build` | `swift test` |\n| **iOS App** | `.xcodeproj` present | `xcodebuild build` | `xcodebuild test` |\n\nThe setup script detects your project type automatically.\n\n---\n\n## 📋 Requirements\n\n- **Swift** 6.0+\n- **Xcode** 16.0+ (for iOS apps)\n- **Git** 2.30+\n- **SwiftLint** and **SwiftFormat** (`brew install swiftlint swiftformat`)\n\n---\n\n## 🚀 Installation\n\n### 1. Add as Submodule\n\n```bash\ncd /path/to/your/project\ngit submodule add https://github.com/arclabs-studio/ARCDevTools\ngit submodule update --init --recursive\n```\n\nThe `--recursive` flag is important — it also pulls the nested ARCKnowledge submodule that contains the development standards and Claude Code skills.\n\n### 2. Run Setup\n\n```bash\n./ARCDevTools/arcdevtools-setup\n```\n\nThis copies configs to your project root, installs git hooks, generates a Makefile, and symlinks Claude Code skills. You'll be asked whether to also copy GitHub Actions workflows.\n\nNon-interactive mode for CI:\n```bash\n./ARCDevTools/arcdevtools-setup --with-workflows   # Include workflows\n./ARCDevTools/arcdevtools-setup --no-workflows     # Skip workflows\n```\n\n### 3. Commit\n\n```bash\ngit add .gitmodules ARCDevTools/ .swiftlint.yml .swiftformat Makefile .claude/\ngit commit -m \"chore: integrate ARCDevTools for quality automation\"\n```\n\n### What Gets Installed\n\nAfter setup, your project looks like this:\n\n```\nYourProject/\n├── ARCDevTools/                     ← submodule (this repo)\n│   └── ARCKnowledge/               ← nested submodule (standards + skills)\n├── .swiftlint.yml                  ← copied from configs/\n├── .swiftformat                    ← copied from configs/\n├── .git/hooks/pre-commit           ← installed from hooks/\n├── .git/hooks/pre-push             ← installed from hooks/\n├── Makefile                        ← generated for your project type\n├── .github/workflows/              ← copied if you chose workflows\n└── .claude/skills/                 ← ARCKnowledge skills (symlinks) + ARCDevTools skills (copied)\n```\n\n---\n\n## 📖 Usage\n\n### Makefile Commands\n\n```bash\nmake help      # Show all available commands\nmake lint      # Run SwiftLint\nmake format    # Check formatting (dry-run)\nmake fix       # Apply SwiftFormat auto-fixes\nmake setup     # Re-run ARCDevTools setup\nmake hooks     # Re-install git hooks\nmake clean     # Clean build artifacts\n```\n\n**Swift Packages** also get:\n```bash\nmake build     # swift build\nmake test      # swift test --parallel\n```\n\n**iOS Apps** also get:\n```bash\nmake build SCHEME=MyApp    # xcodebuild build\nmake test SCHEME=MyApp     # xcodebuild test\n```\n\n### Git Hooks\n\nQuality checks run automatically:\n\n- **Pre-commit** — Runs SwiftFormat (auto-fix) and SwiftLint (strict) on staged `.swift` files. Blocks the commit if linting fails.\n- **Pre-push** — Runs all tests. Blocks the push if tests fail.\n\n---\n\n## 📐 Code Style\n\nARCDevTools enforces the code style defined in [ARCKnowledge](https://github.com/arclabs-studio/ARCKnowledge). The key settings:\n\n### SwiftFormat\n\n| Setting | Value |\n|---------|-------|\n| Indentation | 4 spaces |\n| Line width | 120 characters |\n| Self keyword | Remove when not required |\n| Brace style | Same-line (K\u0026R) |\n| Wrap arguments | After first (first param on same line) |\n| Wrap parameters | After first (first param on same line) |\n| Attributes | Always same-line (type, func, stored-var, computed-var, complex) |\n| Imports | Grouped, `@testable` at bottom |\n\n### SwiftLint\n\n**40+ opt-in rules** including:\n\n- **Multiline formatting** — `multiline_arguments` and `multiline_parameters` with `first_argument_location: same_line`, plus bracket and chain rules\n- **Safety** — `force_unwrapping`, `no_force_cast` (error), `no_force_try` (error)\n- **Style** — `implicit_return`, `closure_spacing`, `vertical_whitespace_*_braces`, `yoda_condition`\n- **Performance** — `first_where`, `last_where`, `sorted_first_last`, `contains_over_filter_*`\n\n**Custom rules:**\n\n| Rule | Severity | Purpose |\n|------|----------|---------|\n| `observable_viewmodel` | warning | ViewModels must use `@Observable` |\n| `no_force_cast` | error | Use `as?` instead of `as!` |\n| `no_force_try` | error | Use proper error handling instead of `try!` |\n| `no_empty_line_after_guard` | warning | Clean guard statement formatting |\n\nFull configs: [`configs/swiftlint.yml`](configs/swiftlint.yml) and [`configs/swiftformat`](configs/swiftformat).\n\n---\n\n## 🛠️ Customization\n\nThe copied configs (`.swiftlint.yml`, `.swiftformat`) are yours to modify. Your customizations are preserved when updating ARCDevTools — the setup script overwrites them, so commit any local overrides before re-running setup.\n\nFor project-specific SwiftLint additions, edit the copied `.swiftlint.yml` directly.\n\n---\n\n## ⚙️ CI/CD\n\n### Xcode Cloud (Recommended for iOS Apps)\n\nARCDevTools provides `ci_scripts/` templates for [Xcode Cloud](https://developer.apple.com/documentation/xcode/xcode-cloud) — Apple's native CI/CD with 25 free compute hours/month.\n\nDuring setup, iOS apps are offered interactive installation:\n\n```\nDo you want to install Xcode Cloud ci_scripts/? [y/N]:\n```\n\nOr non-interactive: `./ARCDevTools/arcdevtools-setup --with-workflows`\n\n**Templates** in [`templates/ci_scripts/`](templates/ci_scripts/):\n\n| Script | When | Purpose |\n|--------|------|---------|\n| `ci_post_clone.sh` | After clone | Verify `Package.resolved`, install SwiftLint |\n| `ci_pre_xcodebuild.sh` | Before each build | Log build context (action, platform, PR/tag) |\n| `ci_post_xcodebuild.sh` | After each build | Log results (archive/test paths) |\n\nSee the complete setup guide: [`docs/xcode-cloud-setup.md`](docs/xcode-cloud-setup.md)\n\n### GitHub Actions Workflows\n\nWorkflows are templates adapted per project type. Choose to install them during setup.\n\n**Core workflows:**\n\n| Workflow | Swift Package | iOS App |\n|----------|--------------|---------|\n| `quality.yml` | Checks `Sources/`, `Tests/` | Checks project root |\n| `tests.yml` | `swift test` (macOS + Linux) | `xcodebuild test` (iOS Simulator) |\n\n**Shared workflows:**\n- `enforce-gitflow.yml` — Branch rule enforcement\n- `sync-develop.yml` — Auto-sync main to develop\n- `release-drafter.yml` — Auto-draft release notes from PRs\n\n**SPM-only:** `docs.yml` (DocC), `validate-release.yml`\n\n\u003e **Billing note:** macOS runners have a 10x billing multiplier on GitHub Actions. ARCDevTools optimizes by running lint/format on Ubuntu. See [docs/ci-cd.md](docs/ci-cd.md) for details.\n\n---\n\n## 🤖 Claude Code Skills\n\nARCDevTools delivers Claude Code skills from two sources:\n\n### ARCKnowledge Skills (12 skills)\n\nInstalled as **symlinks** from `ARCDevTools/ARCKnowledge/.claude/skills/` into your project's `.claude/skills/`. These provide progressive context loading — agents load only the standards they need for the current task.\n\n| Phase | Skills |\n|-------|--------|\n| **Architecture** | `/arc-swift-architecture`, `/arc-project-setup` |\n| **Implementation** | `/arc-presentation-layer`, `/arc-data-layer`, `/arc-tdd-patterns`, `/arc-worktrees-workflow`, `/arc-memory` |\n| **Review** | `/arc-final-review`, `/arc-quality-standards`, `/arc-workflow` |\n| **Audit** | `/arc-audit` |\n| **CI/CD** | `/arc-xcode-cloud` |\n\nFor detailed descriptions of each skill and how they interact with other skill sources (Axiom, MCP Cupertino), see [`ARCKnowledge/Skills/skills-index.md`](ARCKnowledge/Skills/skills-index.md).\n\n### ARCDevTools Skills\n\nInstalled as **copies** into `.claude/skills/`:\n\n| Skill | Purpose |\n|-------|---------|\n| `arc-package-validator` | Validates Swift Packages against ARCKnowledge standards (structure, config, docs, quality) |\n\nRun directly: `swift .claude/skills/arc-package-validator/scripts/validate.swift .`\n\n---\n\n## 🔄 Updating\n\n```bash\ncd ARCDevTools\ngit pull origin main\ncd ..\ngit submodule update --recursive\n./ARCDevTools/arcdevtools-setup\ngit add ARCDevTools .swiftlint.yml .swiftformat Makefile\ngit commit -m \"chore(deps): update ARCDevTools to vX.Y.Z\"\n```\n\n---\n\n## 🏗️ Project Structure\n\n```\nARCDevTools/\n├── arcdevtools-setup              # Setup script (Swift)\n├── configs/\n│   ├── swiftlint.yml              # SwiftLint configuration\n│   └── swiftformat                # SwiftFormat configuration\n├── hooks/\n│   ├── pre-commit                 # Format + lint on commit\n│   ├── pre-push                   # Tests on push\n│   └── install-hooks.sh           # Hook installer\n├── scripts/\n│   ├── lint.sh                    # Standalone lint script\n│   ├── format.sh                  # Standalone format script\n│   ├── setup-github-labels.sh     # GitHub label configuration\n│   ├── setup-branch-protection.sh # Branch protection rules\n│   └── setup-skills.sh            # Skills installer\n├── workflows-spm/                 # CI/CD templates (Swift Packages)\n├── workflows-ios/                 # CI/CD templates (iOS Apps)\n├── claude-hooks/                  # Claude Code hooks (notifications)\n├── templates/                     # GitHub PR template, etc.\n├── .claude/skills/                # ARCDevTools-specific skills\n│   └── arc-package-validator/\n├── ARCKnowledge/                  # Submodule: standards + skills\n├── docs/                          # Additional documentation\n├── CHANGELOG.md\n├── CONTRIBUTING.md\n└── LICENSE\n```\n\n---\n\n## 🤝 Contributing\n\nARCDevTools is an internal tool for ARC Labs Studio.\n\n1. Clone: `git clone --recurse-submodules https://github.com/arclabs-studio/ARCDevTools.git`\n2. Branch: `feature/your-improvement`\n3. Test changes by running `arcdevtools-setup` in a sample project\n4. PR to `develop`\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for full guidelines.\n\n---\n\n## 🔗 Related\n\n- **[ARCKnowledge](https://github.com/arclabs-studio/ARCKnowledge)** — Development standards and Claude Code skills (included as submodule)\n- **[SwiftLint](https://github.com/realm/SwiftLint)** — Swift style enforcement\n- **[SwiftFormat](https://github.com/nicklockwood/SwiftFormat)** — Code formatting for Swift\n\n---\n\nMIT License - 2025 ARC Labs Studio\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farclabs-studio%2Farcdevtools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farclabs-studio%2Farcdevtools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farclabs-studio%2Farcdevtools/lists"}