main
pico.sh
Eric Bower
·
2026-05-16
1#!/usr/bin/env bash
2set -euo pipefail
3
4export ZMX_SESSION_PREFIX="${ZMX_SESSION_PREFIX:-ci.pico.}"
5JOB_ID="${PICO_CI_JOB_ID:-local}"
6EVENT_TYPE="${PICO_CI_EVENT_TYPE:-manual}"
7
8printf "\x1b[33m[%s] running ci (event=%s)\x1b[0m\n" "$JOB_ID" "$EVENT_TYPE"
9
10zmx run lint -d docker run -t --rm -v $(pwd):/app -w /app golangci/golangci-lint:v2.11.4 golangci-lint run
11zmx run build -d docker build -t pico-test -f ./Dockerfile.test .
12zmx wait "*"
13zmx run test docker run -t --rm -v /var/run/docker.sock:/var/run/docker.sock -e REQUIRE_TESTCONTAINERS=1 pico-test
14
15printf "\x1b[32msuccess tests!\x1b[0m\n"
16
17if [ "$EVENT_TYPE" != "release" ]; then
18 exit 0
19fi
20
21DOCKER_TAG="latest"
22DOCKER_PLATFORM="linux/amd64,linux/arm64"
23
24docker buildx ls | grep pico || docker buildx create --name pico
25docker buildx use pico
26zmx run caddy -d docker buildx build --push --platform "$DOCKER_PLATFORM" -t "ghcr.io/picosh/pico/caddy:$DOCKER_TAG" ./caddy
27zmx run bouncer docker buildx build --push --platform "$DOCKER_PLATFORM" -t "ghcr.io/picosh/pico/bouncer:$DOCKER_TAG" ./bouncer
28zmx wait "*"
29
30zmx run auth docker buildx build --push --platform "$DOCKER_PLATFORM" -t "ghcr.io/picosh/pico/auth-web:$DOCKER_TAG" --build-arg APP=auth --target release-web .
31zmx run cdn docker buildx build --push --platform "$DOCKER_PLATFORM" -t "ghcr.io/picosh/pico/pgs-cdn:$DOCKER_TAG" --target release-web -f Dockerfile.cdn .
32zmx run standalone docker buildx build --push --platform "$DOCKER_PLATFORM" -t "ghcr.io/picosh/pgs:$DOCKER_TAG" --target release -f Dockerfile.standalone .
33zmx wait "*"
34
35apps=("prose" "pastes" "pgs" "feeds" "pipe")
36for APP in "${apps[@]}"; do
37 zmx run "$APP-ssh" -d docker buildx build --push --platform "$DOCKER_PLATFORM" -t "ghcr.io/picosh/pico/$APP-ssh:$DOCKER_TAG" --build-arg "APP=$APP" --target release-ssh .
38 zmx run "$APP-web" -d docker buildx build --push --platform "$DOCKER_PLATFORM" -t "ghcr.io/picosh/pico/$APP-web:$DOCKER_TAG" --build-arg "APP=$APP" --target release-web .
39 zmx wait "*"
40done
41
42printf "\x1b[32msuccess release!\x1b[0m\n"