{"id":45702286,"url":"https://github.com/evlist/codespaces-grafting","last_synced_at":"2026-02-28T19:05:43.961Z","repository":{"id":330837418,"uuid":"1123153342","full_name":"evlist/codespaces-grafting","owner":"evlist","description":"A codespace to debug WordPress plugins","archived":false,"fork":false,"pushed_at":"2026-02-23T13:37:01.000Z","size":187,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-23T21:46:59.546Z","etag":null,"topics":["bash","devcontainer","devops","github-codespaces","template","wordpress"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/evlist.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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-12-26T09:34:46.000Z","updated_at":"2026-02-23T13:37:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/evlist/codespaces-grafting","commit_stats":null,"previous_names":["evlist/wp-plugin-codespace","evlist/codespaces-grafting"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/evlist/codespaces-grafting","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evlist%2Fcodespaces-grafting","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evlist%2Fcodespaces-grafting/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evlist%2Fcodespaces-grafting/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evlist%2Fcodespaces-grafting/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evlist","download_url":"https://codeload.github.com/evlist/codespaces-grafting/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evlist%2Fcodespaces-grafting/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29804171,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-24T22:43:48.403Z","status":"ssl_error","status_checked_at":"2026-02-24T22:43:18.536Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","devcontainer","devops","github-codespaces","template","wordpress"],"created_at":"2026-02-24T23:03:11.517Z","updated_at":"2026-02-24T23:03:17.250Z","avatar_url":"https://github.com/evlist.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\nSPDX-FileCopyrightText: 2025, 2026 Eric van der Vlist \u003cvdv@dyomedea.com\u003e\n\nSPDX-License-Identifier: GPL-3.0-or-later OR MIT\n--\u003e\n\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true\u0026ref=main\u0026repo=evlist/codespaces-grafting)\n[![Release](https://img.shields.io/github/v/release/evlist/codespaces-grafting?color=blue)](https://github.com/evlist/codespaces-grafting/releases)\n[![License: GPL-3.0-or-later](https://img.shields.io/badge/license-GPL--3.0--or--later-blue)](LICENSES/GPL-3.0-or-later.txt)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSES/MIT.txt)\n[![Uses cs-grafting](.devcontainer/assets/graft-badge.svg)](https://github.com/evlist/codespaces-grafting)\n\n\u003cimg src=\".devcontainer/assets/icon.svg\" alt=\"codespaces-grafting logo\" title=\"codespaces-grafting\" width=\"256\" style=\"float:right;max-width:256px;height:auto\" /\u003e\n\n# codespaces-grafting (aka cs-grafting)\n\nA lightweight, shareable \"live Codespace\" / devcontainer scaffold. Graft this Codespace into an existing repository to give it an instant, reproducible development environment.\n\n🌱 Quick metaphor (attention)  \nThis project is to Codespaces what grafting is to gardening: you graft this Codespace template (the scion) into an existing repository (the stock) to add a ready-to-run development environment.\n\nWho this is for\n- Primary: WordPress plugin and theme authors (current templates and examples target WP).\n- Secondary: Any project that wants a small, repeatable Codespace/devcontainer setup — the approach is intentionally generic.\n\nWhy use this\n- ✨ Live Codespace: click the badge to create a Codespace from this template and export the scion into your repo (fastest path).\n- ⚙️ Minimal \u0026 conservative: provides PHP, WP‑CLI and common tooling while preserving your project/editor settings.\n- 🔁 Simple updater: graft.sh grafts the scion into your repo and helps you adopt template improvements safely.\n\nDevelopment tools included\n- **Web stack**: Apache, MariaDB, PHP (with Xdebug)\n- **WordPress**: WP-CLI for command-line WordPress management\n- **Code quality**: Composer, PHP_CodeSniffer (phpcs) with WordPress Coding Standards\n- **DevOps**: GitHub CLI (gh), REUSE tool for license compliance\n- **Common utilities**: curl, jq, less, unzip\n\nTerminology (short)\n- scion — the Codespace/devcontainer template (.devcontainer/.vscode/.github)\n- stock — your repository getting the scion grafted\n- graft — the act of applying the scion (graft.sh)\n\nQuick start\n- Easiest (live Codespace): click the Codespaces badge → create a Codespace → export the scion into your repository via the Codespace UI.\n- From a workstation:\n  ```bash\n  curl -L -o ~/Downloads/graft.sh \\\n    https://raw.githubusercontent.com/evlist/codespaces-grafting/stable/.devcontainer/bin/graft.sh\n  chmod +x ~/Downloads/graft.sh\n  cd /path/to/your-repo\n  bash ~/Downloads/graft.sh\n  ```\n  Inspect the changes, commit and push the files you want to keep.\n\nDocs and maintainers\n- Short maintainer docs ship with the scion at `.devcontainer/docs/` so detailed guidance travels with the template and does not pollute stock repos.\n- Current examples target WordPress; the pattern is reusable for other ecosystems.\n\nProject structure (high level)\n```\n.\n├── README.md\n├── .devcontainer/                # scion (grafted into stock)\n│   ├── README.md                 # scion maintainer notes\n│   ├── docs/                     # extended scion docs (maintainers)\n│   ├── assets/                   # icons, images used in scion docs\n│   ├── devcontainer.json\n│   ├── Dockerfile\n│   ├── .cs_env                   # base environment variables\n│   ├── .cs_env.d/                # additional env files (Debian .d style)\n│   ├── bin/\n│   │   └── graft.sh              # installer/updater (graft)\n│   ├── sbin/\n│   │   ├── bootstrap.sh          # container startup script\n│   │   ├── bootstrap.sh.d/       # modular bootstrap hooks (Debian .d style)\n│   │   └── merge-env.sh          # merges .cs_env and .cs_env.d/*\n│   ├── tmp/                      # temporary files (gitignored)\n│   ├── var/                      # runtime data (gitignored)\n│   └── wp-content/               # WordPress content customizations\n├── .vscode/                      # editor templates \u0026 stubs (managed)\n├── .github/                      # workflows templates (managed)\n└── plugins-src/                  # example/sample plugin(s) (WP-focused examples)\n```\n\nThe scion uses **Debian-style `.d` directories** for modular configuration:\n- **`.cs_env.d/`**: Environment variable overrides loaded in alphabetical order\n- **`bootstrap.sh.d/`**: Startup hooks (10-aliases.sh, 20-plugins.sh, etc.) sourced sequentially\n\nThis makes customization easy: create `.local.sh` hooks (e.g., `25-themes.local.sh` for themes, `40-import.local.sh` for WP-CLI commands) that won't be overwritten during upgrades. See the [FAQ](.devcontainer/docs/FAQ.md#8-customization) for examples.\n\n## GitHub Workflows (Configurable CI/CD)\n\nReady-to-use GitHub Actions workflows included:\n- **`cs-grafting-ci.yml`** — Run tests (PHPUnit, PHP CodeSniffer, custom lint scripts)\n- **`cs-grafting-plugin-zip.yml`** — Build and publish plugin ZIPs, manage nightly releases\n\nAll workflows are **fully configurable** via GitHub Variables:\n- Enable/disable workflows\n- Choose which branches trigger them\n- Configure plugin directory (for monorepos)\n- Select which tests to run\n- Customize artifact exclusions\n\nSee [.devcontainer/docs/WORKFLOWS_CONFIG.md](.devcontainer/docs/WORKFLOWS_CONFIG.md) for complete configuration guide.\n\nWant more?\n- Maintainers: see [.devcontainer/README.md](.devcontainer/README.md) for upgrade semantics and structure\n- [FAQ](.devcontainer/docs/FAQ.md) — frequently asked questions\n- [MAINTAINER.md](.devcontainer/docs/MAINTAINER.md) — detailed procedures\n- [Workflows Guide](.devcontainer/docs/WORKFLOWS_CONFIG.md) — GitHub Actions configuration\n\n📝 Note: This root `README.md` is **not copied** when grafting. Your stock repository keeps its own README. `.devcontainer/`, managed `.vscode/`, and managed `.github/` files are grafted.\n\n## Support \u0026 Community\n\n- **Questions?** Check the [FAQ](.devcontainer/docs/FAQ.md)\n- **Report bugs** or suggest features via [GitHub Issues](https://github.com/evlist/codespaces-grafting/issues)\n- **Contribute**: See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines\n- **Discussions**: Open a [GitHub Discussion](https://github.com/evlist/codespaces-grafting/discussions) for ideas and feedback\n\n## License\n\nThis project is dual-licensed:\n\n- GPL-3.0-or-later OR\n- MIT\n\nYou may choose either license. See the LICENSE file and LICENSES/ directory for full texts.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevlist%2Fcodespaces-grafting","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevlist%2Fcodespaces-grafting","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevlist%2Fcodespaces-grafting/lists"}