diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index beacd6d0..ef60d323 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,16 +1,16 @@ ## Summary - + -## Changes +## Verification -- + ## Checklist -- [ ] TypeScript type-check passes (`npm run type-check`) -- [ ] Frontend builds (`npm run build`) -- [ ] Tests pass (`npm test`) -- [ ] Rust clippy clean (if backend changes) -- [ ] No new compiler warnings -- [ ] Tested on live server +- [ ] Rust formatting/clippy/tests pass when backend code changed. +- [ ] Frontend type-check/build/tests pass when frontend code changed. +- [ ] App manifests validate when app packaging changed. +- [ ] Generated catalogs are updated when manifest-owned catalog fields changed. +- [ ] Docs are updated for user-facing or developer-facing behavior changes. +- [ ] No secrets, generated build outputs, local screenshots, or private host details are included. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 88697e19..d385323b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,11 +8,11 @@ on: env: RUST_VERSION: stable - NODE_VERSION: 18 + NODE_VERSION: 20 jobs: rust: - name: Rust (fmt + clippy + test) + name: Rust runs-on: ubuntu-latest defaults: run: @@ -28,17 +28,17 @@ jobs: toolchain: ${{ env.RUST_VERSION }} components: rustfmt, clippy - - name: Check formatting + - name: Format run: cargo fmt --all -- --check - name: Clippy run: cargo clippy --all-targets --all-features -- -D warnings - - name: Tests + - name: Test run: cargo test --all-features frontend: - name: Frontend (type-check + lint) + name: Frontend runs-on: ubuntu-latest defaults: run: @@ -52,14 +52,31 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - cache: 'npm' + cache: npm cache-dependency-path: neode-ui/package-lock.json - - name: Install dependencies + - name: Install run: npm ci - name: Type check run: npm run type-check + - name: Test + run: npm test + - name: Build run: npm run build + + manifests: + name: App Manifests + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Validate manifests + run: | + for manifest in apps/*/manifest.yml; do + ./scripts/validate-app-manifest.sh --repo-audit "$manifest" + done diff --git a/.gitignore b/.gitignore index 53492bb0..82c46e47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,9 @@ -# SSH keys (sandbox copies) +# SSH keys and sandbox copies .ssh/ # Rust build output target/ **/target/ -Cargo.lock # Node.js node_modules/ @@ -12,7 +11,6 @@ node_modules/ npm-debug.log* yarn-debug.log* yarn-error.log* -package-lock.json pnpm-debug.log* # Build outputs @@ -28,49 +26,46 @@ build/ *.swo *~ .DS_Store +._* +Thumbs.db # Environment and local overrides .env .env.local .env.*.local +.env.production +core/.env.production scripts/deploy-config.sh # Logs logs/ *.log -# OS -.DS_Store -Thumbs.db - # Testing coverage/ .nyc_output/ -# Temporary files -*.tmp -*.temp - -# Build artifacts +# Image / release artifacts *.iso *.img *.dmg *.app +*.apk +*.keystore +*.s9pk +*.tar.gz -# Release artifacts live in Gitea Release attachments, not Git history. +# Release artifacts live in release attachments, not Git history. releases/** !releases/ !releases/manifest.json -# macOS build output -build/macos/ - # Image recipe output image-recipe/output/ image-recipe/*.iso image-recipe/*.img -# Loop tool artifacts (created in every subdirectory) +# Loop tool artifacts */loop/ loop/loop/ loop/loop.log.bak @@ -78,19 +73,17 @@ loop/loop.log.bak # Separate repos nested in tree web/ -._* - -# Resilience harness reports (generated, contains session cookies) +# Resilience harness reports contain session cookies. scripts/resilience/reports/ # Codex / pnpm / python caches / editor backups .codex .codex-target-*/ .codex-tmp/ +.claude/ .pnpm-store/ **/__pycache__/ *.bak -.claude/scheduled_tasks.lock # Local evidence screenshots; intentional UI screenshots should live under an # app/docs asset path with a descriptive filename. diff --git a/Android/app/debug.keystore b/Android/app/debug.keystore deleted file mode 100644 index d99c47cf..00000000 Binary files a/Android/app/debug.keystore and /dev/null differ diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..90378f2b --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,19 @@ +# Code of Conduct + +## Our standard + +Be direct, respectful, and focused on the work. Healthy disagreement is welcome; +harassment, personal attacks, and discriminatory language are not. + +## Scope + +This code of conduct applies to project repositories, issue trackers, pull +requests, documentation, chat, and community spaces connected to Archipelago. + +## Enforcement + +Maintainers may edit, hide, or remove comments and may restrict participation +for behavior that makes collaboration unsafe or unproductive. + +Report conduct concerns privately through the repository owner account or the +private contact channel listed on the project homepage. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b255972c..ab6cdb0b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,161 +1,100 @@ # Contributing to Archipelago -Thank you for your interest in contributing to Archipelago! This document covers the process for contributing code, reporting bugs, and submitting apps. +This project is preparing for public developer contribution. The highest-value +contributions are focused fixes, tests, app manifests, documentation +improvements, and clear bug reports with reproducible evidence. -## Code of Conduct +## Development setup -Be respectful. We follow the [Contributor Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/). - -## Getting Started - -1. Fork the repository on the project's Gitea instance -2. Clone your fork: `git clone /archy.git` -3. Set up the dev environment (see `docs/developer-guide.md`) -4. Create a feature branch: `git checkout -b feature/your-feature` - -## Development Setup - -### Frontend (Vue.js) +### Frontend ```bash cd neode-ui npm install -npm start # Dev server on :8100 -npm run type-check # TypeScript validation -npm run build # Production build -npm test # Run tests +npm start +npm run type-check +npm test ``` -### Backend (Rust) - -Build on a Linux server (Debian 13), **not** macOS: +### Backend ```bash -cargo clippy --all-targets --all-features -cargo fmt --all +cd core +cargo fmt --all -- --check +cargo clippy --all-targets --all-features -- -D warnings cargo test --all-features ``` -### Deploy to dev server +Linux is required for host integration work involving Podman, systemd, +networking, or image builds. Frontend development works locally with the mock +backend. + +## App manifests + +App packages live under `apps//manifest.yml` and use the schema +documented in [docs/app-manifest-spec.md](docs/app-manifest-spec.md). Validate +before submitting: ```bash -./scripts/deploy-to-target.sh --live +./scripts/validate-app-manifest.sh apps//manifest.yml +python3 scripts/generate-app-catalog.py +python3 scripts/check-app-catalog-drift.py --release --strict ``` -## Code Style +App submissions must: -### Frontend (TypeScript + Vue) +- pin container image versions; +- avoid hardcoded secrets; +- use `security.no_new_privileges: true`; +- use `security.readonly_root: true` unless the manifest explains why writable + root is required; +- request only necessary Linux capabilities; +- store durable data under `/var/lib/archipelago//`; +- define truthful health checks and launch interfaces for user-facing UIs. -- `