chore: add GitHub community files and CI pipeline
- .github/workflows/ci.yml: TypeScript check + Vitest + build on every PR - .github/dependabot.yml: weekly npm + Actions updates (minor/patch grouped) - .github/ISSUE_TEMPLATE/: bug_report, feature_request, config (→ Discussions) - .github/PULL_REQUEST_TEMPLATE.md: checklist for contributors - SECURITY.md: responsible disclosure policy via GitHub Advisories - CONTRIBUTING.md: dev setup, code style, commit conventions
This commit is contained in:
47
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
47
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
name: "\U0001F41B Bug report"
|
||||
about: Something isn't working as expected
|
||||
title: "[bug] "
|
||||
labels: bug
|
||||
assignees: ''
|
||||
---
|
||||
|
||||
## Describe the bug
|
||||
|
||||
A clear description of what the bug is.
|
||||
|
||||
## Steps to reproduce
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '...'
|
||||
3. See error
|
||||
|
||||
## Expected behavior
|
||||
|
||||
What you expected to happen.
|
||||
|
||||
## Actual behavior
|
||||
|
||||
What actually happened. Include screenshots if relevant.
|
||||
|
||||
## Environment
|
||||
|
||||
| Field | Value |
|
||||
|---|---|
|
||||
| immich-folio version | vX.X.X / commit SHA |
|
||||
| Immich version | |
|
||||
| Deployment | Docker / manual |
|
||||
| Browser | Chrome / Firefox / Safari |
|
||||
| OS | |
|
||||
|
||||
## `content/gallery.yaml` (redacted)
|
||||
|
||||
```yaml
|
||||
# Paste a minimal reproduction of your config here (remove any tokens/passwords!)
|
||||
```
|
||||
|
||||
## Logs
|
||||
|
||||
```
|
||||
# Paste relevant Docker / console logs here
|
||||
```
|
||||
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: "\U0001F4AC Discussions (Questions & Ideas)"
|
||||
url: https://github.com/ralksta/immich-folio/discussions
|
||||
about: Please use Discussions for general questions and ideas instead of issues.
|
||||
- name: "\U0001F512 Security vulnerability"
|
||||
url: https://github.com/ralksta/immich-folio/security/advisories/new
|
||||
about: Please report security vulnerabilities privately via GitHub's Security Advisories.
|
||||
27
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
27
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
name: "\U0001F4A1 Feature request"
|
||||
about: Suggest an idea or improvement
|
||||
title: "[feat] "
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
---
|
||||
|
||||
## Summary
|
||||
|
||||
A brief description of the feature you'd like to see.
|
||||
|
||||
## Problem / motivation
|
||||
|
||||
What problem does this solve? Is it connected to a specific workflow?
|
||||
|
||||
## Proposed solution
|
||||
|
||||
Describe the solution you'd like.
|
||||
|
||||
## Alternatives considered
|
||||
|
||||
Any alternative approaches you've thought about?
|
||||
|
||||
## Additional context
|
||||
|
||||
Screenshots, mockups, links to similar implementations, etc.
|
||||
27
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
27
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
## Summary
|
||||
|
||||
<!-- What does this PR do? Reference the issue it closes if applicable. -->
|
||||
Closes #
|
||||
|
||||
## Type of change
|
||||
|
||||
- [ ] 🐛 Bug fix
|
||||
- [ ] ✨ New feature
|
||||
- [ ] 🎨 Style / visual
|
||||
- [ ] ♻️ Refactor
|
||||
- [ ] 🔒 Security fix
|
||||
- [ ] 📝 Documentation
|
||||
- [ ] 🛠️ Build / CI
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] `npm run build` passes locally
|
||||
- [ ] `npx tsc --noEmit` passes (0 type errors)
|
||||
- [ ] `npx vitest run` passes (all tests green)
|
||||
- [ ] No secrets / API keys in diff
|
||||
- [ ] Documentation updated if needed (`docs/`, `README.md`)
|
||||
- [ ] Screenshots attached if there are visual changes
|
||||
|
||||
## Screenshots (if applicable)
|
||||
|
||||
<!-- Before / After -->
|
||||
42
.github/dependabot.yml
vendored
Normal file
42
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
version: 2
|
||||
|
||||
updates:
|
||||
# npm dependencies
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "monday"
|
||||
time: "09:00"
|
||||
timezone: "Europe/Berlin"
|
||||
open-pull-requests-limit: 5
|
||||
labels:
|
||||
- "dependencies"
|
||||
groups:
|
||||
# Batch minor/patch Next.js updates together
|
||||
nextjs:
|
||||
patterns:
|
||||
- "next"
|
||||
- "eslint-config-next"
|
||||
# Batch React updates
|
||||
react:
|
||||
patterns:
|
||||
- "react"
|
||||
- "react-dom"
|
||||
- "@types/react*"
|
||||
ignore:
|
||||
# Don't auto-update major versions (review manually)
|
||||
- dependency-name: "*"
|
||||
update-types: ["version-update:semver-major"]
|
||||
|
||||
# GitHub Actions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
day: "monday"
|
||||
time: "09:00"
|
||||
timezone: "Europe/Berlin"
|
||||
labels:
|
||||
- "dependencies"
|
||||
- "github-actions"
|
||||
43
.github/workflows/ci.yml
vendored
Normal file
43
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
name: CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
# Cancel in-progress runs for the same PR / branch
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
name: Type-check & Test
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'npm'
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: TypeScript – type check
|
||||
run: npx tsc --noEmit
|
||||
|
||||
- name: Run tests
|
||||
run: npx vitest run
|
||||
|
||||
- name: Build
|
||||
run: npm run build
|
||||
env:
|
||||
# Minimal env vars so Next.js build doesn't bail early on env validation
|
||||
IMMICH_URL: http://localhost:2283
|
||||
IMMICH_API_KEY: placeholder-key-for-ci
|
||||
68
CONTRIBUTING.md
Normal file
68
CONTRIBUTING.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# Contributing to Immich Folio
|
||||
|
||||
Thanks for your interest in contributing! 🎉
|
||||
|
||||
## Ways to contribute
|
||||
|
||||
- **Bug reports** — [Open a bug report issue](https://github.com/ralksta/immich-folio/issues/new?template=bug_report.md)
|
||||
- **Feature requests** — [Open a feature request](https://github.com/ralksta/immich-folio/issues/new?template=feature_request.md)
|
||||
- **Pull requests** — see below
|
||||
- **Discussions** — [Ask questions or share ideas](https://github.com/ralksta/immich-folio/discussions)
|
||||
|
||||
## Development setup
|
||||
|
||||
```bash
|
||||
# 1. Clone
|
||||
git clone https://github.com/ralksta/immich-folio.git
|
||||
cd immich-folio
|
||||
|
||||
# 2. Install
|
||||
npm install
|
||||
|
||||
# 3. Configure
|
||||
cp content/gallery.example.yaml content/gallery.yaml
|
||||
# Edit .env or set IMMICH_URL + IMMICH_API_KEY
|
||||
|
||||
# 4. Run
|
||||
npm run dev # http://localhost:3000
|
||||
npm run build # production build check
|
||||
```
|
||||
|
||||
## Before submitting a PR
|
||||
|
||||
```bash
|
||||
npx tsc --noEmit # must be 0 errors
|
||||
npx vitest run # all tests must pass
|
||||
npm run build # build must succeed
|
||||
```
|
||||
|
||||
## Code style
|
||||
|
||||
- **TypeScript** — strict mode, no `any` without justification
|
||||
- **Components** — Server Components by default; use `'use client'` only when necessary
|
||||
- **CSS** — vanilla CSS variables, no Tailwind, no CSS-in-JS
|
||||
- **Naming** — descriptive names, no abbreviations in public APIs
|
||||
|
||||
## Commit messages
|
||||
|
||||
Use [Conventional Commits](https://www.conventionalcommits.org/):
|
||||
|
||||
```
|
||||
feat: add new hero style
|
||||
fix: correct image aspect ratio on mobile
|
||||
security: escape HTML in map popups
|
||||
docs: update theming guide
|
||||
chore: bump next to 15.x
|
||||
```
|
||||
|
||||
## Pull Request checklist
|
||||
|
||||
- [ ] `npx tsc --noEmit` passes
|
||||
- [ ] `npx vitest run` passes
|
||||
- [ ] `npm run build` passes
|
||||
- [ ] No secrets in the diff
|
||||
- [ ] Documentation updated if needed
|
||||
|
||||
## License
|
||||
|
||||
By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE).
|
||||
44
SECURITY.md
Normal file
44
SECURITY.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Only the latest release on `main` is actively maintained.
|
||||
|
||||
| Version | Supported |
|
||||
|---|---|
|
||||
| `main` (latest) | ✅ |
|
||||
| older commits | ❌ |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
**Please do not report security vulnerabilities through public GitHub Issues.**
|
||||
|
||||
Instead, use one of these private channels:
|
||||
|
||||
- **GitHub Security Advisories** (preferred): [Open a draft advisory](https://github.com/ralksta/immich-folio/security/advisories/new)
|
||||
- **Email**: contact the maintainer via the email listed on the GitHub profile
|
||||
|
||||
### What to include
|
||||
|
||||
- Description of the vulnerability and potential impact
|
||||
- Steps to reproduce (minimal reproduction if possible)
|
||||
- Affected versions / configurations
|
||||
- Any proposed fix or mitigation
|
||||
|
||||
### Response timeline
|
||||
|
||||
- **Acknowledgement**: within 48 hours
|
||||
- **Triage & assessment**: within 7 days
|
||||
- **Fix & coordinated disclosure**: within 30 days for critical issues
|
||||
|
||||
## Scope
|
||||
|
||||
immich-folio acts as a **reverse proxy** in front of your private Immich instance. Security issues in scope include:
|
||||
|
||||
- Authentication / session bypass
|
||||
- API key / secret leakage
|
||||
- XSS vulnerabilities in gallery pages or lightbox
|
||||
- Rate-limiting bypass enabling DoS
|
||||
- Insecure Docker defaults that expose the Immich backend
|
||||
|
||||
Out of scope: vulnerabilities in Immich itself (report those upstream at [immich.app](https://immich.app)).
|
||||
Reference in New Issue
Block a user