Skip to content

Add Unraid CA template and CasaOS app manifest - #26

Closed
Lucifix wants to merge 5 commits into
mainfrom
claude/appstore-listings
Closed

Lucifix wants to merge 5 commits into
mainfrom
claude/appstore-listings

Conversation

@Lucifix

@Lucifix Lucifix commented Oct 17, 2026 •

Copy link
Copy Markdown
Owner

What does this change?

Adds listings for two homelab app stores, ready for you to submit. Nothing has been submitted to either store yet.

  • appstores/unraid/: the Unraid Community Apps repository profile (ca_profile.xml) and a Docker template for lucifix/model-workshop-manager:latest (Docker Hub).
  • appstores/casaos/: an app manifest in the CasaOS App Store v2 format (Compose plus a top-level x-casaos block), with a note on how to submit it.

Where the Unraid template lives: a separate repo

The CA docs (builder guide, starter repo) expect a dedicated submission repository:

  • ca_profile.xml at the repository root
  • one XML file per app under templates/
  • an OSI-approved LICENSE at the root

CA also scans the whole repo it's given. Putting the template in this repo would add ca_profile.xml and templates/ to the root we just tidied, and point CA's scanner at the whole app codebase. So appstores/unraid/ is laid out as the root of a separate repo, Lucifix/unraid-templates. The template's TemplateURL and the profile's WebPage already point there.

Choices worth checking

Unraid template

  • Ports and volumes: host 8080 → container 3000, /data and /backups.
  • SESSION_COOKIE_SECURE (default false) and TRUST_PROXY (default empty) are exposed as variables. Their descriptions come from .env.example.
  • APP_UID/APP_GID are not template variables. They only feed Compose's user:, so as container env vars they'd do nothing. The template sets --user 99:100 under Extra Parameters instead, which users can edit. Unraid's Docker manager creates missing host paths owned by 99:100 (Helpers.php). Running as the image's default uid 1000, the app couldn't write its database there.
  • Data and backups go in sibling folders, /mnt/user/appdata/model-workshop-manager/{data,backups}. If the backups folder sat inside the data folder, every backup would include the earlier ones.
  • The icon is public/icon-512.png via raw.githubusercontent.com. Screenshots are the three mobile shots from docs/screenshots/.

CasaOS manifest

  • The image is lucifix/model-workshop-manager:1.0.0 from Docker Hub, and x-casaos.version is 1.0.0. That matches the store's other apps. Each release means a small PR to the store.
  • Host port 13080, so it doesn't clash with CasaOS or other apps.
  • Volumes: /DATA/AppData/$AppID/{data,backups}.
  • No user: override. CasaOS creates missing bind folders with mode 0777 (CasaOS-Common), so the default uid 1000 can write to them.
  • x-casaos.id is org.icewhale.modelworkshopmanager, the format the store's validator suggests.
  • A healthcheck hits /api/health.
  • Image assets aren't duplicated here. The submission steps copy them from public/ and docs/screenshots/.

How to submit: Unraid Community Apps

  1. Create a public GitHub repo Lucifix/unraid-templates. If you pick another name, update <TemplateURL> in the template and <WebPage> in ca_profile.xml.
  2. Copy the contents of appstores/unraid/ and this repo's LICENSE into it:
    git clone https://github.com/Lucifix/unraid-templates.git && cd unraid-templates
    cp -R ../model-workshop-manager/appstores/unraid/. .
    cp ../model-workshop-manager/LICENSE .
    git add . && git commit -m "Add Model Workshop Manager template" && git push
  3. Check that https://raw.githubusercontent.com/Lucifix/unraid-templates/main/templates/model-workshop-manager.xml loads.
  4. Optional but common: open a support thread in the Unraid forums under Docker Containers. Add its URL as <Forum> in ca_profile.xml and <Support> in the template. Until then, <Support> points at GitHub Discussions.
  5. Go to https://ca.unraid.net/submit/new, sign in, and enter the repo URL. Run Validate, then Scan. Fix anything they flag, push, and run them again.
  6. Submit for review once every check passes.
  7. After it's live, edit the template in unraid-templates. Delete appstores/unraid/ here, or keep the two in sync.

How to submit: CasaOS App Store

  1. Fork IceWhaleTech/CasaOS-AppStore and clone the fork next to this repo.
  2. Copy the manifest and assets into the fork. Run these from the fork's root:
    mkdir -p Apps/ModelWorkshopManager
    cp ../model-workshop-manager/appstores/casaos/ModelWorkshopManager/docker-compose.yml Apps/ModelWorkshopManager/
    cp ../model-workshop-manager/public/favicon.svg Apps/ModelWorkshopManager/icon.svg
    cp ../model-workshop-manager/public/icon-512.png Apps/ModelWorkshopManager/icon.png
    cp ../model-workshop-manager/docs/screenshots/readme-hero.png Apps/ModelWorkshopManager/thumbnail.png
    cp ../model-workshop-manager/docs/screenshots/mobile-dashboard.png Apps/ModelWorkshopManager/screenshot-1.png
    cp ../model-workshop-manager/docs/screenshots/mobile-models.png Apps/ModelWorkshopManager/screenshot-2.png
    cp ../model-workshop-manager/docs/screenshots/mobile-build.png Apps/ModelWorkshopManager/screenshot-3.png
  3. Validate locally. The build should finish cleanly and produce dist/apps/org.icewhale.modelworkshopmanager/.
    docker compose -f Apps/ModelWorkshopManager/docker-compose.yml config -q
    ./scripts/build_dist.sh
  4. Optional: test-install on a CasaOS box first. In the App Store, use Custom Install → Import and paste the compose file.
  5. Commit on a branch, push, and open a PR to IceWhaleTech/CasaOS-AppStore:main titled e.g. "Add Model Workshop Manager". In the description, say it adds a new app and how you validated it. The store's Validate Compose And Build check runs on the PR.

These steps are also in appstores/unraid/README.md and appstores/casaos/README.md.

What was verified

  • Both XML files parse. The template has 5 Config entries: 1 port, 2 paths, 2 variables.
  • The CasaOS compose parses. It passes the store's own validate_name and validate_x_casaos_id checks, run locally from their validate-compose action. Required x-casaos fields are present, and the category is one of the allowed values.
  • Links to this repo, Docker Hub, the website and Discussions return 200.
  • Both listings pull from Docker Hub so store installs count toward its pull count. The Docker Hub and GHCR images are identical: same digests for latest and 1.0.0, both amd64 and arm64.
  • These links return 404 until you finish submitting:
    • The CasaOS cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/ModelWorkshopManager/* URLs (icon, thumbnail, screenshots). They point at the store's own folder, which is how every app in the store is written. The store build (build-appstore-action, resolve_asset_source) maps them to the local files copied in step 2 and rewrites them to the published asset URLs, so it never fetches them. Skip the copy and the build fails.
    • The Unraid TemplateURL and WebPage. Both point at Lucifix/unraid-templates, which doesn't exist until step 1.

Not verified:

  • docker compose config -q and the CasaOS build_dist.sh (Docker isn't available here).
  • CA's online Validate/Scan.
  • Installing on real Unraid or CasaOS hardware.
  • Running as uid 99 on Unraid. That uid has no passwd entry in the Alpine image, which Node doesn't need, but it hasn't been tried.

Checklist

  • No app code changes, so lint/typecheck/build/tests are unaffected
  • Comments explain why (e.g. the --user 99:100 note in the template)

Listings for homelab app stores, ready for the owner to submit:
- appstores/unraid: ca_profile.xml and a Docker template, laid out as the
  root of a separate Lucifix/unraid-templates repo per the CA builder guide.
  Runs with --user 99:100 since Unraid creates appdata paths as nobody:users.
- appstores/casaos: a v2 compose + x-casaos manifest for
  IceWhaleTech/CasaOS-AppStore, pinned to 1.0.0.
Same image as GHCR (identical digests for latest and 1.0.0); store
installs then count toward the Docker Hub pull count.
@Lucifix Lucifix closed this Oct 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant