Skip to content

Publish the App Store catalog with the website - #55

Merged
avni merged 4 commits into
mainfrom
fix/issue-50-app-catalog
Oct 27, 2026
Merged

avni merged 4 commits into
mainfrom
fix/issue-50-app-catalog

Conversation

@MetzinAround

@MetzinAround MetzinAround commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Copilot Generated

Summary

  • Publish the App Store catalog with the website so loading and Reload do not depend on GitHub's REST API.
  • Generate app folders, file lists, README descriptions, and the source commit together from public badger/home.
  • Download app files and icons from that same commit, including fixes to existing apps that do not change the file list.
  • Generate and test the catalog during Pages deployment. Add manual deployment support and retire the nightly description-data PR workflow.
  • Keep the existing Save, Clear selection, badge connection, and local upload behavior. A failed Reload keeps the previous app list.

Related: #50. This covers the App Store portion only; the other issue items and the new Build guide request remain separate.

Refreshed for review

  • Updated against main 2da92a8 without rewriting published history. All five website branches also combine without conflicts.
  • The shared deployment test now checks that required Doom verification precedes the actual build command, rather than depending on a step's display name.
  • Combined validation: 267 tests pass, both 31-page production builds pass (/ and /badger.github.io/), and 104 built-output checks pass. Workflow lint and required Doom-asset checks pass.
  • All GitHub build checks pass at this PR's saved head. Nothing has been merged or deployed.
  • Combined catalog generation with main's required Doom checks and canonical URL checks. Retained manual deployment and pinned Actions.
  • Catalog loading and Reload now use the deployment base. Focused tests cover both / and /badger.github.io/.
  • The 34 saved catalog entries load and Reload works with GitHub API requests blocked (403/429), on desktop/mobile in both themes.
  • Existing local App Store icon paths are unchanged from main: some icons fall back on a prefixed preview because their saved paths start at /images/.
  • GitHub App setup, the sender in Trigger website catalog builds after app changes home#121, and live automatic publication remain deferred. This PR can be reviewed without those credentials.

Earlier focused verification

  • 24 focused catalog, description, and app picker tests pass.
  • Real-source generation produces 34 apps at dd686d841f3653e7bef5e0ba78f288b0cc03c303 and is unchanged on a second run.
  • npm run build passes.
  • git diff --check passes.
  • Chromium checks pass with GitHub REST returning 403/429: all 34 apps still load from the website.
  • Pong's real README and app file download successfully from the catalog commit. Reload keeps the same queued files; Save remains disabled without a badge.
  • Failed Reload keeps cards and selections with the approved message. Initial-load failure recovers through Reload.
  • Desktop/mobile layouts pass in dark/light themes, with no horizontal overflow or uncaught errors.
  • actionlint 1.7.12 validates all three workflows without diagnostics; exact pinned-action inputs and workflow contracts pass.
  • GitHub CI builds pass.
  • Cross-repository dispatch and live publication need reviewed merges and GitHub App setup.

Expected browser errors came only from deliberately blocked repository-badge requests and forced catalog failures. Physical badge writes and live automatic publication are not tested.

Rollout

Merge this receiving workflow before enabling the companion sender in badger/home#121. App changes reaching badger/home/main, not releases or tags, will start the deployment.

The sender needs a dedicated organization-owned GitHub App installed only on badger/badger.github.io, with repository Actions read/write permission. An administrator must configure a main-only catalog-sync environment in badger/home, with CATALOG_APP_CLIENT_ID as an environment variable and CATALOG_APP_PRIVATE_KEY as an environment secret. Keep the private key out of code, chat, logs, and artifacts.

Until the sender is configured, an authorized maintainer can run Deploy manually on main. A failed checkout, catalog validation, or build leaves the published site unchanged. No automatic source commits or generated-data PRs are required.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 16600baa-96ad-4836-8e96-6b34a1c9fbd9
MetzinAround and others added 2 commits October 24, 2026 19:32
Keep catalog generation alongside canonical URL and Doom asset checks. Resolve catalog requests through the shared site-path helper for prefixed deployments.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 16600baa-96ad-4836-8e96-6b34a1c9fbd9
Retain main's build-and-URL-verification step name. Assert that required Doom verification runs before the actual build command, avoiding unnecessary workflow conflicts between the website PRs.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 16600baa-96ad-4836-8e96-6b34a1c9fbd9
@MetzinAround
MetzinAround marked this pull request as ready for review October 25, 2026 02:59
Copilot AI balanced review requested due to automatic review settings October 25, 2026 02:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The revised Pages pipeline and deferred cross-repository activation need final human validation of permissions and rollout configuration.

No open issues 🎉

What changed in this PR

Publishes the App Store catalog with the website to address GitHub API rate limits, while keeping app downloads tied to a consistent source commit.

Changes:

  • Generates app file lists, README descriptions, and source revision together from public badger/home.
  • Switches catalog consumers to same-site loading and preserves the previous app list when Reload fails.
  • Adds deployment-time generation, validation, and manual dispatch; retires nightly description-update PRs and documents deferred automatic publication.
File Description
tests/​site-paths.test.mjs Tests catalog loading under both deployment bases.
tests/​doom-provisioning.test.mjs Checks Doom verification precedes the build command.
src/​pages/​apps.astro Removes the separate descriptions prop.
src/​lib/​github-app-catalog.ts Adds catalog validation, same-site fetching, and pinned download URLs.
src/​data/​app-descriptions.json Refreshes generated descriptions.
src/​components/​badge-manager.tsx Uses published metadata and commit-pinned downloads.
src/​components/​app-count.tsx Reads app counts from the published catalog.
scripts/​sync-app-descriptions.mjs Extracts reusable description generation and JSON writing.
scripts/​sync-app-catalog.test.mjs Tests generation, validation, fetching, and download URLs.
scripts/​sync-app-catalog.mjs Generates catalog metadata from committed source files.
README.md Documents generation, deployment, and rollout setup.
public/​app-catalog.json Adds the generated 34-app catalog.
package.json Adds catalog generation and test commands.
.gitignore Excludes the deployment source checkout.
.github/​workflows/​update-app-descriptions.yml Removes nightly description-update PR automation.
.github/​workflows/​deploy.yml Generates and validates metadata before deployment; adds manual dispatch.
.github/​workflows/​ci.yml Runs catalog tests and limits token permissions.
.github/​copilot-instructions.md Updates catalog maintenance and publication guidance.

Review effort: Balanced

@MetzinAround

Copy link
Copy Markdown
Contributor Author

@copilot update this branch so we can safely merge it into main soon.

Co-authored-by: MetzinAround <65838556+MetzinAround@users.noreply.github.com>

Copilot AI commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

@copilot update this branch so we can safely merge it into main soon.

Merged current main into the branch without rewriting history. Merge commit: 9c76931. Focused validation, secret scanning, and CodeQL passed; full dependency installation was blocked by inaccessible package tarball hosts in this environment.

@avni
avni merged commit 39b88c3 into main Oct 27, 2026
4 checks passed
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.

4 participants