docs: refresh DEV_WORKFLOW for 5-image build + tweak campaign card layout
- DEV_WORKFLOW.md: reflect that build-and-push.sh now produces 5 images (api, admin, media-api, nginx, ccp-agent), not 4. - CampaignsListPage: move card title below cover photo instead of overlaying it, so titles remain legible when no cover image is set. Bunker Admin
This commit is contained in:
parent
1f240ad518
commit
3f6102cf6d
@ -33,8 +33,9 @@ All three methods share the same Gitea container registry at `gitea.bnkops.com/a
|
|||||||
│ BUILD & PUBLISH │
|
│ BUILD & PUBLISH │
|
||||||
│ │
|
│ │
|
||||||
│ Step 1: ./scripts/build-and-push.sh │
|
│ Step 1: ./scripts/build-and-push.sh │
|
||||||
│ Builds 4 production images, pushes to Gitea registry │
|
│ Builds 5 production images, pushes to Gitea registry │
|
||||||
│ (api, admin, media-api, nginx) tagged :SHA + :latest │
|
│ (api, admin, media-api, nginx, ccp-agent) │
|
||||||
|
│ tagged :SHA + :latest │
|
||||||
│ │
|
│ │
|
||||||
│ Step 2: ./scripts/mirror-images.sh (run once/rarely) │
|
│ Step 2: ./scripts/mirror-images.sh (run once/rarely) │
|
||||||
│ Mirrors 36 third-party images to Gitea registry │
|
│ Mirrors 36 third-party images to Gitea registry │
|
||||||
@ -98,7 +99,7 @@ After code changes are tested locally:
|
|||||||
./scripts/build-and-push.sh
|
./scripts/build-and-push.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
This builds **4 services** with multi-stage Dockerfiles (production target, no dev dependencies), tags each image with `:SHA` and `:latest`, and pushes to `gitea.bnkops.com/admin/changemaker-{service}`:
|
This builds **5 services** with multi-stage Dockerfiles (production target, no dev dependencies), tags each image with `:SHA` and `:latest`, and pushes to `gitea.bnkops.com/admin/changemaker-{service}`:
|
||||||
|
|
||||||
| Service | Dockerfile | What it produces |
|
| Service | Dockerfile | What it produces |
|
||||||
|---------|-----------|-----------------|
|
|---------|-----------|-----------------|
|
||||||
@ -106,6 +107,7 @@ This builds **4 services** with multi-stage Dockerfiles (production target, no d
|
|||||||
| `admin` | `admin/Dockerfile` | Nginx serving React build output |
|
| `admin` | `admin/Dockerfile` | Nginx serving React build output |
|
||||||
| `media-api` | `api/Dockerfile.media` | Fastify + FFmpeg (compiled JS) |
|
| `media-api` | `api/Dockerfile.media` | Fastify + FFmpeg (compiled JS) |
|
||||||
| `nginx` | `nginx/Dockerfile` | Nginx with `envsubst` domain templating |
|
| `nginx` | `nginx/Dockerfile` | Nginx with `envsubst` domain templating |
|
||||||
|
| `ccp-agent` | `../changemaker-control-panel/agent/Dockerfile` | Remote management agent (sibling repo) |
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Build specific services only
|
# Build specific services only
|
||||||
@ -269,7 +271,7 @@ docker compose logs -f api # Watch API logs
|
|||||||
docker compose exec api npx prisma migrate dev # Create migration
|
docker compose exec api npx prisma migrate dev # Create migration
|
||||||
|
|
||||||
# ── Build & Publish ──
|
# ── Build & Publish ──
|
||||||
./scripts/build-and-push.sh # Build + push 4 images
|
./scripts/build-and-push.sh # Build + push 5 images
|
||||||
./scripts/mirror-images.sh # Mirror 36 third-party images
|
./scripts/mirror-images.sh # Mirror 36 third-party images
|
||||||
git tag --sort=-v:refname | head -3 # Check latest version tags
|
git tag --sort=-v:refname | head -3 # Check latest version tags
|
||||||
./scripts/build-release.sh --tag vX.Y.Z --upload # Package + upload release
|
./scripts/build-release.sh --tag vX.Y.Z --upload # Package + upload release
|
||||||
@ -310,7 +312,7 @@ There are **two separate Gitea tokens** with different purposes. Using the wrong
|
|||||||
# Check commits since the last tag
|
# Check commits since the last tag
|
||||||
git log $(git tag --sort=-v:refname | head -1)..HEAD --oneline
|
git log $(git tag --sort=-v:refname | head -1)..HEAD --oneline
|
||||||
```
|
```
|
||||||
4. [ ] `./scripts/build-and-push.sh` — builds and pushes 4 production images
|
4. [ ] `./scripts/build-and-push.sh` — builds and pushes 5 production images
|
||||||
5. [ ] `./scripts/mirror-images.sh` — only if third-party versions changed
|
5. [ ] `./scripts/mirror-images.sh` — only if third-party versions changed
|
||||||
6. [ ] `./scripts/build-release.sh --tag vX.Y.Z --upload` — packages and uploads tarball
|
6. [ ] `./scripts/build-release.sh --tag vX.Y.Z --upload` — packages and uploads tarball
|
||||||
7. [ ] **Add release notes** (via Gitea web UI or API):
|
7. [ ] **Add release notes** (via Gitea web UI or API):
|
||||||
|
|||||||
@ -451,7 +451,7 @@ export default function CampaignsListPage() {
|
|||||||
styles={{ body: { padding: 0, display: 'flex', flexDirection: 'column', height: '100%' } }}
|
styles={{ body: { padding: 0, display: 'flex', flexDirection: 'column', height: '100%' } }}
|
||||||
>
|
>
|
||||||
<Link to={`/campaign/${campaign.slug}`} style={{ display: 'block', flex: 1, padding: 20 }}>
|
<Link to={`/campaign/${campaign.slug}`} style={{ display: 'block', flex: 1, padding: 20 }}>
|
||||||
{campaign.coverPhoto ? (
|
{campaign.coverPhoto && (
|
||||||
<div
|
<div
|
||||||
style={{
|
style={{
|
||||||
height: 140,
|
height: 140,
|
||||||
@ -459,31 +459,12 @@ export default function CampaignsListPage() {
|
|||||||
backgroundImage: `url(${campaign.coverPhoto})`,
|
backgroundImage: `url(${campaign.coverPhoto})`,
|
||||||
backgroundSize: 'cover',
|
backgroundSize: 'cover',
|
||||||
backgroundPosition: 'center',
|
backgroundPosition: 'center',
|
||||||
display: 'flex',
|
|
||||||
alignItems: 'center',
|
|
||||||
justifyContent: 'center',
|
|
||||||
}}
|
}}
|
||||||
>
|
/>
|
||||||
<Title level={4} style={{ color: '#fff', margin: 0, textShadow: '0 2px 8px rgba(0,0,0,0.6)', textAlign: 'center', padding: '0 16px' }} ellipsis={{ rows: 2 }}>
|
|
||||||
{campaign.title}
|
|
||||||
</Title>
|
|
||||||
</div>
|
|
||||||
) : (
|
|
||||||
<div
|
|
||||||
style={{
|
|
||||||
height: 140,
|
|
||||||
margin: '-20px -20px 16px -20px',
|
|
||||||
background: `linear-gradient(135deg, ${token.colorPrimaryBg} 0%, ${colorBgContainer} 100%)`,
|
|
||||||
display: 'flex',
|
|
||||||
alignItems: 'center',
|
|
||||||
justifyContent: 'center',
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Title level={4} style={{ color: '#fff', margin: 0, textAlign: 'center', padding: '0 16px' }} ellipsis={{ rows: 2 }}>
|
|
||||||
{campaign.title}
|
|
||||||
</Title>
|
|
||||||
</div>
|
|
||||||
)}
|
)}
|
||||||
|
<Title level={4} style={{ color: '#fff', margin: '0 0 12px', fontSize: isMobile ? 18 : 17, lineHeight: 1.35 }} ellipsis={{ rows: 2 }}>
|
||||||
|
{campaign.title}
|
||||||
|
</Title>
|
||||||
{campaign.description && (
|
{campaign.description && (
|
||||||
<Paragraph
|
<Paragraph
|
||||||
style={{ color: 'rgba(255,255,255,0.55)', fontSize: isMobile ? 14 : 13, margin: '0 0 12px', lineHeight: 1.5 }}
|
style={{ color: 'rgba(255,255,255,0.55)', fontSize: isMobile ? 14 : 13, margin: '0 0 12px', lineHeight: 1.5 }}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user