Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

deploy/compose: install.sh doesn't pull, so a locally cached :latest can run a stale image (supervisor crash loop)

Open Beginner friendly
#349 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
88/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
docker, docker-compose, shell

Research direction

Start with install.sh and the existing assertions in tests/install.test.sh, then check the Try it command in deploy/compose/README.md. Verify the compose pull occurs before the stack starts, both on a fresh machine and with a cached image, and run the install test to confirm the ordering and repeat flow.

Written by the indexing model from the issue text.

Description

bug

Summary

install.sh (and the README's "Try it" flow) runs docker compose up -d without pulling first. On any machine that has previously fetched ghcr.io/rossoctl/serverless-harness:latest — even once, days or weeks ago — Compose reuses the cached image instead of checking the registry, because a mutable tag that already exists locally is never re-resolved on up. The stack still comes up "successfully" (every container reports Started), but it's running whatever was cached, silently.

Repro

  1. At some point in the past, pull or run the trial once, so ghcr.io/rossoctl/serverless-harness:latest exists locally.
  2. Let main get rebuilt and republished (any push through build.yaml).
  3. Re-run the install.sh one-liner from deploy/compose/README.md.
  4. docker-compose ps shows supervisor cycling ("Up Less than a second"). docker-compose logs supervisor:
    Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'tsx' imported from /app/packages/supervisor/
    
  5. curl http://127.0.0.1:8080/turn gets Recv failure: Connection reset by peer (or hangs), depending on where the container is in its restart loop.

Hit this after #345 merged: the locally cached image was ~2 weeks old and had no /app/packages/supervisor directory at all (predates the package existing), while sandbox-relay — same image, different working dir — happened to still work because tsx and the relay's code were already present in that stale layer set.

Root cause

  • docker compose up -d only pulls an image when no local image matches the reference. A :latest tag already present is never re-checked against the registry's current digest.
  • install.sh has no pull step ($COMPOSE pull, or up --pull always), so it inherits this behavior with zero signal to the user — no warning, no version check, nothing. The trial looks like it started cleanly right up until the first /turn call fails.

Fix options

  • (a) Add $COMPOSE pull before $COMPOSE up -d in install.sh (or pass --pull always to up). Simplest; guarantees current main on every run, first-time or repeat.
  • (b) Leave install.sh as-is and just document docker compose pull as a manual step for re-runs.

(a) is the one that actually fixes it for a first-time user, who has no way to know their Docker cache is stale — there's nothing to "remember to do."

Acceptance criteria

  • install.sh pulls before starting the stack, on both a fresh machine and a re-run with a stale cached image.
  • tests/install.test.sh asserts the pull happens (and happens before up).
  • Re-running the "Try it" one-liner from the README always gets the current main images without a manual docker compose pull.

Related: #342 (compose trial), #345.

Dominant language
TypeScript
Stars
5
Forks
11
Avg merge
8h 58m
Merged PRs (30d)
154

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from rossoctl/moca

All issues in rossoctl/moca

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.