Skip to content
This repository was archived by the owner on Jul 13, 2026. It is now read-only.

feat: one-click Coolify deploy via GitHub - #13

Merged
heyinterspace merged 1 commit into
mainfrom
coolify-deploy
Jul 9, 2026
Merged

heyinterspace merged 1 commit into
mainfrom
coolify-deploy

Conversation

@heyinterspace

Copy link
Copy Markdown
Owner

Summary

Phase 1 of the approved infra plan: Coolify (self-hosted OSS PaaS) becomes the single opinionated hosting target, GitHub stays the single repo layer.

  • Deploy flow: "Deploy to Coolify" builds locally (early failure), pushes the project to a GitHub repo (new headless pushFilesToGitHubRepo helper mirroring the existing dialog's Octokit sequence), then creates or redeploys a Coolify application pointed at that repo via its REST API. First deploy uses opinionated defaults (first server, first project, nixpacks buildpack, instant deploy) so the click asks nothing; the app UUID is remembered per chat for one-call redeploys.
  • Connection: Settings > Integrations gets a "Hosting" section with instance URL + API token inputs (Linear's manual-token pattern; Coolify is self-hosted so no OAuth/Nango). Validation is proxied server-side because self-hosted instances don't send CORS headers.
  • Deploy menu: trimmed from 5 entries (Netlify/Vercel/GitHub/GitLab/disabled Cloudflare) to 2: Deploy to Coolify + Push to GitHub. Old provider code stays in the tree; deletion is a follow-up after Coolify is verified live.
  • Cleanup: the recursive project-file collection duplicated across deploy flows is now shared as deployUtils.collectProjectFiles.

Test plan

  • pnpm run typecheck / lint / build pass
  • Preview: Hosting section renders; a fake instance URL fails gracefully with a clear error through the full form → hook → proxy path
  • Full round-trip against a real Coolify instance + API token (needs user's VPS; deferred)

🤖 Generated with Claude Code

…rgets

Coolify (self-hosted OSS PaaS) becomes the one opinionated hosting
target; GitHub stays the one repo layer. Since Coolify can only build
from a git source, "Deploy to Coolify" pushes the project to a GitHub
repo first (headless helper mirroring GitHubDeploymentDialog's Octokit
sequence), then creates or redeploys a Coolify application pointed at
that repo via its REST API, with opinionated defaults (first server,
first project, nixpacks) so the click asks nothing.

- New: coolify store/hook (instance URL + API token, mirroring
  useLinearConnection's manual-token pattern; no OAuth since Coolify is
  self-hosted and not in Nango's catalog), Settings > Integrations
  "Hosting" section, api.coolify-user (CORS proxy validation),
  api.coolify-deploy (create-or-redeploy + best-effort fqdn lookup),
  CoolifyDeploy.client, lib/github/pushToGitHub.
- DeployButton drops Netlify/Vercel/GitLab/Cloudflare-placeholder
  entries; menu is now Deploy to Coolify + Push to GitHub. Old provider
  files are left in place for now; deleting them is a follow-up once
  Coolify is verified against a real instance.
- Extracted the duplicated recursive project-file collection into
  deployUtils.collectProjectFiles (GitHubDeploy now uses it too).

Verified: typecheck/lint/build pass; in the preview, the Hosting
section renders, and a fake instance URL fails gracefully with a clear
error through the full form -> hook -> proxy route path. Full deploy
round-trip needs a real Coolify instance + token.
@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown

ℹ️ Preview deployment not configured

Name Info
Latest commit c11897b
Status Preview deployment requires Cloudflare secrets

To enable preview deployments, repository maintainers can add:

  • CLOUDFLARE_API_TOKEN secret
  • CLOUDFLARE_ACCOUNT_ID secret

Built with ❤️ by bolt.diy

@heyinterspace
heyinterspace merged commit 70d72c6 into main Jul 9, 2026
16 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant