-
Notifications
You must be signed in to change notification settings - Fork 1
feat: comprehensive UI overhaul, security hardening, docs, and deployment #71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 3 commits
d5f7967
cafe93a
588337a
6b35cc5
cc17f31
36b85b1
020b5d3
d6fc78d
20833f5
b6ccd26
121ebd9
38dfc53
21ee8c1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -12,7 +12,7 @@ RUN apt-get update && apt-get install -y python3 make g++ gcc libc6-dev && rm -r | |
| COPY package.json bun.lock ./ | ||
| COPY cli/package.json ./cli/package.json | ||
| RUN for i in 1 2 3; do \ | ||
| bun install --frozen-lockfile && break || \ | ||
| bun install --frozen-lockfile --production && break || \ | ||
| (echo "bun install attempt $i failed, retrying in 10s..." && sleep 10); \ | ||
| done | ||
|
Comment on lines
14
to
17
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Prompt To Fix With AIThis is a comment left during a code review.
Path: Dockerfile
Line: 14-17
Comment:
**Production-only install breaks the build stage**
`bun install --production` in the `deps` stage excludes all `devDependencies`. The `builder` stage copies `node_modules` directly from `deps` and then runs `bun run build`. For an Astro project the build toolchain (Astro itself, TypeScript compiler, Vite, etc.) lives in `devDependencies`, so the `bun run build` step will fail with missing module errors at compile time. The `--production` flag is appropriate for the final `runner` image, but the `deps` stage that feeds the builder needs the full dependency tree.
How can I resolve this? If you propose a fix, please make it concise. |
||
|
|
||
|
|
@@ -24,19 +24,20 @@ ENV SKIP_REDIS_CHECK=1 | |
| RUN bun run build | ||
|
|
||
| # Production image | ||
| FROM oven/bun:1 AS runner | ||
| FROM oven/bun:1-slim AS runner | ||
| WORKDIR /app | ||
|
|
||
| # Install git, ssh, and bash (needed for git operations and entrypoint) | ||
| RUN apt-get update && apt-get install -y git openssh-client bash && rm -rf /var/lib/apt/lists/* | ||
| RUN apt-get update && apt-get install -y --no-install-recommends git openssh-client bash && \ | ||
| rm -rf /var/lib/apt/lists/* | ||
|
|
||
| # Create data directories | ||
| RUN mkdir -p /data/repos /data/storage /data/cache /data/ssh && \ | ||
| RUN mkdir -p /data/repositories /data/storage /data/cache /data/ssh && \ | ||
| chown -R bun:bun /data | ||
|
|
||
| # Copy built application | ||
| # Copy only what's needed for runtime | ||
| COPY --from=builder --chown=bun:bun /app/dist ./dist | ||
| COPY --from=builder --chown=bun:bun /app/node_modules ./node_modules | ||
| COPY --from=deps --chown=bun:bun /app/node_modules ./node_modules | ||
| COPY --from=builder --chown=bun:bun /app/package.json ./ | ||
|
|
||
| # Copy drizzle config and schema for migrations | ||
|
|
@@ -51,7 +52,7 @@ COPY --chown=bun:bun docker-entrypoint.sh ./ | |
| ENV HOST=0.0.0.0 | ||
| ENV PORT=4321 | ||
| ENV DATA_DIR=/data | ||
| ENV REPOS_PATH=/data/repos | ||
| ENV GIT_REPOS_PATH=/data/repositories | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The old Dockerfile set Additionally, Prompt To Fix With AIThis is a comment left during a code review.
Path: Dockerfile
Line: 55
Comment:
**`REPOS_PATH` dropped from container environment breaks three runtime modules**
The old Dockerfile set `ENV REPOS_PATH=/data/repos`; this PR replaces it with `ENV GIT_REPOS_PATH=/data/repositories`. However, three source files still read `process.env.REPOS_PATH`: `src/lib/suggested-changes.ts`, `src/lib/mirror-sync.ts`, and `src/lib/cron/cleanup-branches.ts`. With `REPOS_PATH` no longer set in the container environment, each falls back to its local default of `path.join(process.cwd(), "data", "repos")` (i.e., `/app/data/repos`), a path that does not exist and is not mounted — so mirror-sync writes, suggested-change diffing, and scheduled branch cleanup will silently operate on the wrong (absent) directory.
Additionally, `docker-entrypoint.sh` line 41 still uses `${REPOS_PATH:-/data/repos}`, which means the entrypoint creates `/data/repos` at startup rather than `/data/repositories`, leaving the newly configured `GIT_REPOS_PATH` directory unguarded by the entrypoint.
How can I resolve this? If you propose a fix, please make it concise. |
||
| ENV STORAGE_PATH=/data/storage | ||
| ENV CACHE_PATH=/data/cache | ||
| ENV SSH_PATH=/data/ssh | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,56 +1,83 @@ | ||
| # OpenCodeHub | ||
|
|
||
| <p align="center"> | ||
| <picture> | ||
| <source media="(prefers-color-scheme: dark)" srcset="public/logo-dark.png"> | ||
| <source media="(prefers-color-scheme: light)" srcset="public/logo-light.png"> | ||
| <img src="public/logo-light.png" alt="OpenCodeHub" width="380" /> | ||
| <img src="public/logo-light.png" alt="OpenCodeHub" width="420" /> | ||
| </picture> | ||
| </p> | ||
|
|
||
| <h3 align="center">The self-hosted Git platform that doesn't compromise.</h3> | ||
|
|
||
| <p align="center"> | ||
| <a href="https://www.npmjs.com/package/opencodehub-cli"><img src="https://img.shields.io/npm/v/opencodehub-cli?style=flat-square&label=CLI" alt="CLI version"></a> | ||
| <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue?style=flat-square" alt="License"></a> | ||
| <a href="https://github.com/swadhinbiswas/OpencodeHub/actions"><img src="https://img.shields.io/badge/CI-passing-success?style=flat-square" alt="CI"></a> | ||
| <a href="https://github.com/swadhinbiswas/OpencodeHub/actions"><img src="https://img.shields.io/badge/CI-passing-brightgreen?style=for-the-badge" alt="CI"></a> | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '\n== README excerpt ==\n'
nl -ba README.md | sed -n '1,25p'
printf '\n== workflow files ==\n'
find .github/workflows -maxdepth 1 -type f 2>/dev/null | sort
printf '\n== workflow names/paths ==\n'
for f in .github/workflows/*; do
[ -f "$f" ] || continue
echo "--- $f ---"
sed -n '1,120p' "$f" | sed -n '1,40p'
doneRepository: swadhinbiswas/OpencodeHub Length of output: 225 🏁 Script executed: #!/bin/bash
set -euo pipefail
nl -ba README.md | sed -n '1,25p'
echo
find .github/workflows -maxdepth 1 -type f 2>/dev/null | sortRepository: swadhinbiswas/OpencodeHub Length of output: 203 🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '== README excerpt ==\n'
sed -n '1,25p' README.md | awk '{printf "%4d %s\n", NR, $0}'
printf '\n== workflow files ==\n'
find .github/workflows -maxdepth 1 -type f 2>/dev/null | sort || true
printf '\n== workflow headers ==\n'
for f in .github/workflows/*; do
[ -f "$f" ] || continue
echo "--- $f ---"
sed -n '1,30p' "$f"
doneRepository: swadhinbiswas/OpencodeHub Length of output: 5499 Use the CI workflow badge instead of a static status image. 🤖 Prompt for AI Agents |
||
| <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue?style=for-the-badge" alt="License"></a> | ||
| <a href="https://www.npmjs.com/package/opencodehub-cli"><img src="https://img.shields.io/npm/v/opencodehub-cli?style=for-the-badge&label=CLI" alt="CLI version"></a> | ||
| <a href="https://docs.opencodehub.space"><img src="https://img.shields.io/badge/docs-opencodehub.space-brightgreen?style=for-the-badge" alt="Docs"></a> | ||
| <a href="https://hub.docker.com/r/opencodehub/opencodehub"><img src="https://img.shields.io/badge/docker-opencodehub%2Fopencodehub-blue?style=for-the-badge&logo=docker" alt="Docker"></a> | ||
| </p> | ||
|
|
||
| Self-hosted Git platform with stacked PRs, merge queue, CI/CD, and AI code review. Built for teams that want speed and control. | ||
|
|
||
| --- | ||
|
|
||
| ## Quick Start | ||
| OpenCodeHub is a self-hosted Git platform with **stacked PRs**, **merge queue**, **CI/CD pipelines**, and **AI code review**. One platform for everything your team needs — no vendor lock-in, no per-seat pricing. | ||
|
|
||
| ```bash | ||
| git clone https://github.com/swadhinbiswas/OpencodeHub.git | ||
| cd OpenCodeHub | ||
| cp .env.example .env | ||
| docker compose up -d | ||
| docker compose exec app bun run scripts/seed-admin.ts | ||
| ``` | ||
|
|
||
| Open `http://localhost:4321` and create your admin account. | ||
|
|
||
| **Requirements**: Docker, or Node.js 20+ with PostgreSQL. | ||
| **[Documentation](https://docs.opencodehub.space)** · **[Deploy in 5 minutes](#deploy)** · **[CLI Reference](https://docs.opencodehub.space/reference/cli-commands/)** | ||
|
|
||
| --- | ||
|
|
||
| ## What It Does | ||
|
|
||
| **Git Hosting** — HTTP smart protocol + SSH push/pull. Forks, mirroring, LFS, wiki. | ||
| ## Demo | ||
|
|
||
| **Stacked PRs** — Break large changes into dependent branches. Each PR builds on the previous. Review in order, merge in order. | ||
| <!-- Replace VIDEO_ID with your YouTube video ID --> | ||
| [](https://youtu.be/VIDEO_ID) | ||
|
Comment on lines
+29
to
+30
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win Replace the demo placeholder before merging.
🤖 Prompt for AI Agents |
||
|
|
||
| **Merge Queue** — Stack-aware merge ordering with speculative CI builds. `main` never breaks. | ||
| *Watch the full walkthrough — deployment, stacked PRs, AI review, and merge queue in action.* | ||
|
|
||
| **CI/CD** — GitHub Actions-compatible workflows. Docker-based runners. Artifacts, secrets, matrix builds. | ||
| --- | ||
|
|
||
| **AI Code Review** — GPT-4, Claude, Gemini, Groq, Ollama, and 5+ more providers. Catches bugs, security issues, and style problems automatically. | ||
| ## Why OpenCodeHub? | ||
|
|
||
| **Issues & Projects** — Labels, milestones, custom fields, kanban boards. | ||
| | Problem | Solution | | ||
| |---------|----------| | ||
| | PRs too large to review | **Stacked PRs** — break changes into small, dependent branches | | ||
| | Merge conflicts on main | **Merge Queue** — stack-aware ordering with speculative CI builds | | ||
| | Slow review cycles | **AI Code Review** — catches bugs before humans even look | | ||
| | Split across 5+ services | **All-in-one** — Git, PRs, CI/CD, issues, wiki in one place | | ||
| | Data leaves your servers | **Self-hosted** — your code stays on your hardware | | ||
|
|
||
| **175+ API Endpoints** — REST + GraphQL. Full programmatic access to everything. | ||
| --- | ||
|
|
||
| **CLI** — `och` command line tool for stack workflows, reviews, and repository management. | ||
| ## Features | ||
|
|
||
| ### Core Platform | ||
| - **Git Hosting** — HTTP smart protocol + SSH push/pull, forks, mirroring, LFS | ||
| - **Pull Requests** — Inline comments, approvals, suggested changes, draft PRs | ||
| - **Issues & Projects** — Labels, milestones, custom fields, kanban boards | ||
| - **Wiki** — Repository wiki with revision history | ||
| - **Organizations** — Teams, collaborators, role-based access control | ||
|
|
||
| ### Delivery Workflows | ||
| - **Stacked PRs** — Graphite-style stacked branches with web + CLI support | ||
| - **Merge Queue** — Stack-aware queue with speculative builds and priority lanes | ||
| - **CI/CD Pipelines** — GitHub Actions-compatible engine with Docker-based runners | ||
| - **Webhooks** — Outbound webhooks with event filtering and HMAC signing | ||
| - **Automations** — Rule-based workflow automation for PRs and deployments | ||
|
|
||
| ### AI & Quality | ||
| - **AI Code Review** — 10+ providers: GPT-4, Claude, Gemini, Groq, Ollama, OpenRouter | ||
| - **Secret Scanning** — Detect secrets in commits before they reach production | ||
| - **Branch Protection** — Required reviews, status checks, push restrictions | ||
| - **Developer Metrics** — PR velocity, review efficiency, time-to-merge tracking | ||
|
|
||
| ### Security | ||
| - **Authentication** — JWT sessions, OAuth (GitHub, Google, GitLab), 2FA/TOTP, SSO/SAML | ||
| - **Authorization** — RBAC with roles, team permissions, collaborator levels | ||
| - **Rate Limiting** — Redis-backed per-endpoint rate limiting | ||
| - **Audit Logging** — Track all administrative actions | ||
|
|
||
| ### Extensibility | ||
| - **REST API** — 175+ endpoints covering all platform features | ||
| - **GraphQL** — Full GraphQL endpoint for flexible queries | ||
| - **CLI** — `och` command line tool with 20+ command groups | ||
| - **Storage** — Local, S3, MinIO, R2, or any S3-compatible backend | ||
|
|
||
| --- | ||
|
|
||
|
|
@@ -66,73 +93,170 @@ docker compose up -d | |
| docker compose exec app bun run scripts/seed-admin.ts | ||
| ``` | ||
|
|
||
| Open **http://localhost:4321** and create your admin account. | ||
|
|
||
| ### Render (Free) | ||
|
|
||
| See [Render Deployment Guide](docs/RENDER-DEPLOYMENT.md). Uses free PostgreSQL + Upstash Redis. | ||
| Deploy to Render with free PostgreSQL + Upstash Redis: | ||
|
|
||
| ### Other Options | ||
| ```bash | ||
| # 1. Create free Redis at upstash.com (Singapore region) | ||
| # 2. Push to GitHub | ||
| # 3. Render → New → Blueprint → Select your repo | ||
| # 4. Set REDIS_URL and SITE_URL | ||
| # 5. Deploy | ||
| ``` | ||
|
|
||
| See the [Render Deployment Guide](docs/RENDER-DEPLOYMENT.md) for step-by-step instructions. | ||
|
|
||
| | Platform | Guide | | ||
| |----------|-------| | ||
| | Docker Compose | [Deployment Guide](docs/administration/deployment.md) | | ||
| | NAS (Synology/TrueNAS) | [NAS Guide](docs/administration/deploy-nas.md) | | ||
| | Kubernetes | [K8s Guide](docs/administration/kubernetes.md) | | ||
| | Cloudflare Tunnel | [Cloudflare Guide](docs/administration/deploy-cloudflare.md) | | ||
| | Free Tier Options | [Free Deployment](docs/FREE-DEPLOYMENT.md) | | ||
| ### More Deployment Options | ||
|
|
||
| | Platform | Guide | Cost | | ||
| |----------|-------|------| | ||
| | Docker Compose | [Deployment Guide](docs/administration/deployment.md) | Free | | ||
| | Render (Asia) | [Render Guide](docs/RENDER-DEPLOYMENT.md) | Free | | ||
| | Oracle Cloud | [Free Deployment](docs/FREE-DEPLOYMENT.md) | Free forever | | ||
| | NAS (Synology/TrueNAS) | [NAS Guide](docs/administration/deploy-nas.md) | Free | | ||
| | Kubernetes | [K8s Guide](docs/administration/kubernetes.md) | Free | | ||
| | Cloudflare Tunnel | [Cloudflare Guide](docs/administration/deploy-cloudflare.md) | Free | | ||
|
|
||
| --- | ||
|
|
||
| ## CLI | ||
|
|
||
| ```bash | ||
| # Install | ||
| npm install -g opencodehub-cli | ||
|
|
||
| # Login | ||
| och auth login --url http://localhost:4321 | ||
|
|
||
| # Stacked PR workflow | ||
| och stack create feature/auth-step-1 | ||
| och stack submit | ||
| och stack sync | ||
|
|
||
| # Merge queue | ||
| och queue list | ||
| och queue add <pr-number> | ||
|
|
||
| # Interactive cockpit | ||
| och focus | ||
| ``` | ||
|
|
||
| [Full CLI Reference](https://docs.opencodehub.space/reference/cli-commands/) | ||
|
|
||
| --- | ||
|
|
||
| ## API | ||
|
|
||
| ```bash | ||
| # Create a repository | ||
| curl -X POST http://localhost:4321/api/repos \ | ||
| -H "Authorization: Bearer YOUR_TOKEN" \ | ||
| -H "Content-Type: application/json" \ | ||
| -d '{"name":"my-project","visibility":"public"}' | ||
|
|
||
| # List pull requests | ||
| curl http://localhost:4321/api/repos/owner/repo/pulls \ | ||
| -H "Authorization: Bearer YOUR_TOKEN" | ||
|
|
||
| # GraphQL | ||
| curl -X POST http://localhost:4321/api/graphql \ | ||
| -H "Authorization: Bearer YOUR_TOKEN" \ | ||
| -H "Content-Type: application/json" \ | ||
| -d '{"query": "{ repositories { name owner { username } } }"}' | ||
| ``` | ||
|
|
||
| [Full API Reference](https://docs.opencodehub.space/api/rest-api/) | ||
|
|
||
| --- | ||
|
|
||
| ## Tech Stack | ||
|
|
||
| | Layer | Tech | | ||
| |-------|------| | ||
| | Framework | Astro 4.x SSR + React 18 | | ||
| | Database | PostgreSQL, SQLite, Turso (Drizzle ORM) | | ||
| | Auth | JWT, OAuth, 2FA/TOTP, SSO/SAML | | ||
| | Layer | Technology | | ||
| |-------|-----------| | ||
| | Framework | Astro 4.x (SSR) + React 18 | | ||
| | UI | Tailwind CSS + Radix UI | | ||
| | Database | PostgreSQL / SQLite / Turso (Drizzle ORM) | | ||
| | Auth | JWT + OAuth + 2FA/TOTP + SSO/SAML | | ||
| | Git | Native git CLI + simple-git + isomorphic-git | | ||
| | SSH | ssh2 library | | ||
| | CI/CD | Docker-based runners, GitHub Actions syntax | | ||
| | Storage | Local, S3, MinIO, R2, or any S3-compatible | | ||
| | CLI | Commander.js (`npm i -g opencodehub-cli`) | | ||
| | Storage | Local filesystem or S3-compatible (AWS, MinIO, R2) | | ||
| | AI | OpenAI, Anthropic, Google, Groq, Ollama, OpenRouter | | ||
| | Queue | BullMQ + Redis | | ||
| | CLI | Commander.js + Inquirer | | ||
|
|
||
| --- | ||
|
|
||
| ## Documentation | ||
| ## Architecture | ||
|
|
||
| ``` | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win Add a language identifier to the architecture code fence. Use 🧰 Tools🪛 markdownlint-cli2 (0.23.0)[warning] 195-195: Fenced code blocks should have a language specified (MD040, fenced-code-language) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||
| ┌─────────────────────────────────────────────────────────────┐ | ||
| │ CLIENTS │ | ||
| │ Browser │ Git CLI (HTTP/SSH) │ OpenCodeHub CLI (och) │ | ||
| └─────────────────────────────────────────────────────────────┘ | ||
| │ | ||
| ┌─────────────────────────────────────────────────────────────┐ | ||
| │ OPENCODEHUB PLATFORM │ | ||
| │ Web UI (Astro+React) │ REST API (175+ routes) │ GraphQL │ | ||
| │ Git Server (HTTP) │ SSH Server (ssh2) │ │ | ||
| │ Pipeline Runner (Docker) │ │ | ||
| └─────────────────────────────────────────────────────────────┘ | ||
| │ | ||
| ┌─────────────────────────────────────────────────────────────┐ | ||
| │ PostgreSQL/SQLite/Turso │ Redis │ Pluggable Storage │ | ||
| └─────────────────────────────────────────────────────────────┘ | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| Full docs at [docs.opencodehub.space](https://docs.opencodehub.space/): | ||
| ## Documentation | ||
|
|
||
| - [Installation](https://docs.opencodehub.space/getting-started/installation/) | ||
| - [Configuration](https://docs.opencodehub.space/administration/configuration/) | ||
| - [Stacked PRs](https://docs.opencodehub.space/features/stacked-prs/) | ||
| - [AI Code Review](https://docs.opencodehub.space/features/ai-review/) | ||
| - [CLI Reference](https://docs.opencodehub.space/reference/cli-commands/) | ||
| - [API Reference](https://docs.opencodehub.space/api/rest-api/) | ||
| | Topic | Link | | ||
| |-------|------| | ||
| | Installation | [docs.opencodehub.space/getting-started/installation](https://docs.opencodehub.space/getting-started/installation/) | | ||
| | Configuration | [docs.opencodehub.space/administration/configuration](https://docs.opencodehub.space/administration/configuration/) | | ||
| | Stacked PRs | [docs.opencodehub.space/features/stacked-prs](https://docs.opencodehub.space/features/stacked-prs/) | | ||
| | AI Code Review | [docs.opencodehub.space/features/ai-review](https://docs.opencodehub.space/features/ai-review/) | | ||
| | CLI Reference | [docs.opencodehub.space/reference/cli-commands](https://docs.opencodehub.space/reference/cli-commands/) | | ||
| | API Reference | [docs.opencodehub.space/api/rest-api](https://docs.opencodehub.space/api/rest-api/) | | ||
| | Deployment | [docs.opencodehub.space/administration/deployment](https://docs.opencodehub.space/administration/deployment/) | | ||
|
|
||
| --- | ||
|
|
||
| ## CLI | ||
| ## Contributing | ||
|
|
||
| ```bash | ||
| npm install -g opencodehub-cli | ||
| # Clone and setup | ||
| git clone https://github.com/swadhinbiswas/OpencodeHub.git | ||
| cd OpenCodeHub | ||
|
Comment on lines
+233
to
+234
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win Fix the case-sensitive clone directory. The clone URL creates 🤖 Prompt for AI Agents |
||
| cp .env.example .env | ||
| npm install | ||
| npm run db:push | ||
| bun run scripts/seed-admin.ts | ||
|
|
||
| och auth login --url http://localhost:4321 | ||
| och stack create feature/auth | ||
| och stack submit | ||
| och focus | ||
| # Start development | ||
| npm run dev | ||
|
|
||
| # Run tests | ||
| npm run test | ||
| ``` | ||
|
|
||
| --- | ||
| See [CONTRIBUTING.md](CONTRIBUTING.md) for development workflow and standards. | ||
|
|
||
| ## Contributing | ||
| --- | ||
|
|
||
| 1. Fork the repo | ||
| 2. Create a branch | ||
| 3. `npm install && npm run db:push && npm run dev` | ||
| 4. Run tests: `npm run test` | ||
| 5. Open a PR | ||
| ## Community | ||
|
|
||
| See [CONTRIBUTING.md](CONTRIBUTING.md) for details. | ||
| - **GitHub**: [github.com/swadhinbiswas/OpencodeHub](https://github.com/swadhinbiswas/OpencodeHub) | ||
| - **Documentation**: [docs.opencodehub.space](https://docs.opencodehub.space) | ||
| - **Issues**: [GitHub Issues](https://github.com/swadhinbiswas/OpencodeHub/issues) | ||
| - **Discussions**: [GitHub Discussions](https://github.com/swadhinbiswas/OpencodeHub/discussions) | ||
|
|
||
| --- | ||
|
|
||
| ## License | ||
|
|
||
| MIT | ||
| [MIT](LICENSE) — Use it however you want. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: "true"silences the GitHub Actions error that fires when a referenced action ships with a deprecated (EOL) Node.js runtime. The correct fix is to upgrade whichever action(s) still use Node 16 or earlier to a version that targets Node 20. Suppressing the warning with this flag means the workflow continues relying on runtimes that no longer receive security patches.Prompt To Fix With AI