whisper-money/.github
Jesús Mejías Leiva a2dfdb7442
fix(ci): publish the production image as :latest so Docker/Coolify deploys work (#706)
## Problem

Following the official production deployment instructions (Docker
Compose or Coolify), the app container enters a restart loop with:

```
Could not open input file: artisan
```

Reproducible outside Coolify by pulling the published image directly:

```bash
docker run --rm --entrypoint sh \
  ghcr.io/whisper-money/whisper-money:latest \
  -c 'ls -la /app; test -f /app/artisan && echo OK || echo MISSING'
# /app is empty -> ARTISAN_MISSING
```

## Root cause

The `:latest` tag (and the bare `:<sha>` tag) were assigned to the
**development** image, not the production one:

| Image | Dockerfile | `COPY`s code into `/app`? | Tags (before) |
|---|---|---|---|
| Development | `Dockerfile` (`php:8.4-cli`) |  No — relies on the dev
`compose.yaml` bind-mount `.:/app` | **`latest`**, `<sha>` |
| Production | `Dockerfile.production` |  Yes (`COPY . /app/.`) |
`production`, `<sha>-production`, `v<ver>-production` |

The development image never copies the code into the container (it only
works with the `compose.yaml` bind-mount). Pulled standalone, `/app` is
empty and `artisan` is missing, hence the boot crash.

Both official deployment entrypoints point at that tag:

- `docker-compose.production.yml` → `image:
${WHISPER_IMAGE:-ghcr.io/whisper-money/whisper-money:latest}`
- `templates/coolify/whisper-money.yaml` → `image:
ghcr.io/whisper-money/whisper-money:latest`

Nothing in the repo consumes the development `:latest`/`:<sha>` (the dev
`compose.yaml` builds locally, it doesn't `pull`), so publishing the
code-less image under `:latest` was purely a footgun.

## Fix

Reassign the tags to the industry-standard convention (`:latest` = the
deployable production image), touching only the `docker/metadata-action`
metadata blocks in `ci.yml`:

- `:latest` and bare `:<sha>` → **production image**
(`Dockerfile.production`).
- The development image is now published as `:development` /
`:<sha>-development`.
- Existing `:production` and `:v<version>-production` tags are kept, so
current pins remain backward compatible.

Applied to both jobs (`build-image` amd64 and `build-arm64-images`
arm64) so the multi-platform manifests stay consistent.

With this, `docker pull …:latest`, `docker-compose.production.yml`, and
the Coolify template all work with no further changes.
2026-07-21 08:28:42 +00:00
..
ISSUE_TEMPLATE chore: Add GitHub issue template for bug reports (#80) 2026-01-26 19:16:32 +01:00
actions ci: tier 1 + tier 2 pipeline speedups (#342) 2026-05-01 19:07:04 +02:00
copilot/skills feat: Decrypt encrypted transactions on key unlock (#123) 2026-02-16 10:37:43 +01:00
screenshots fix: Hide transaction checkboxes on mobile (#109) 2026-02-12 10:03:31 +01:00
skills chore: update Laravel Boost skills and guidelines (#521) 2026-06-12 18:20:30 +02:00
workflows fix(ci): publish the production image as :latest so Docker/Coolify deploys work (#706) 2026-07-21 08:28:42 +00:00
FUNDING.yml Add GitHub funding model to FUNDING.yml (#40) 2025-12-30 07:22:19 +01:00
copilot-instructions.md feat: Decrypt encrypted transactions on key unlock (#123) 2026-02-16 10:37:43 +01:00