Skip to content

Commit 2483a10

Browse files
committed
ci: add Woodpecker build and image pipeline
1 parent e5e5d77 commit 2483a10

2 files changed

Lines changed: 118 additions & 0 deletions

File tree

‎.woodpecker/ci.yaml‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
clone:
2+
git:
3+
image: woodpeckerci/plugin-git:2.10.0
4+
settings:
5+
partial: false
6+
depth: 0
7+
fetch-target-branch: true
8+
9+
when:
10+
- event: push
11+
branch: [dev, main]
12+
- event: pull_request
13+
- event: manual
14+
15+
steps:
16+
- name: quality
17+
image: oven/bun:1.4.2-alpine@sha256:d73746a3e6cd8de6d7abff1c4c678028b6fe25e0c39808f9a71214589fa8b023
18+
commands:
19+
- |
20+
set -eu
21+
bun install --frozen-lockfile
22+
bun run check
23+
bun run test:coverage
24+
bun run knip
25+
bun run sherif
26+
bun run build

‎.woodpecker/docker.yaml‎

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
clone:
2+
git:
3+
image: woodpeckerci/plugin-git:2.10.0
4+
settings:
5+
partial: false
6+
depth: 0
7+
8+
when:
9+
- event: push
10+
branch: [dev, main]
11+
- event: tag
12+
- event: manual
13+
14+
services:
15+
docker:
16+
image: docker:29.1.3-dind@sha256:64d6ee47ea821c986467199baa162f5ac8cde3f57b719f18e23f3ed7a7444131
17+
privileged: true
18+
environment:
19+
DOCKER_TLS_CERTDIR: ""
20+
commands:
21+
- dockerd-entrypoint.sh --host=tcp://0.0.0.0:2375 --tls=false --insecure-registry=registry:5000
22+
23+
steps:
24+
- name: wait-docker
25+
image: docker:29.1.3-cli@sha256:e0b6ff45302985d99b9685b2a2fec50c3379bd47067493968f51da901dc53ad5
26+
environment:
27+
DOCKER_HOST: tcp://docker:2375
28+
commands:
29+
- |
30+
for attempt in $$(seq 1 60); do
31+
if docker info >/dev/null 2>&1; then
32+
exit 0
33+
fi
34+
sleep 1
35+
done
36+
exit 1
37+
38+
- name: publish
39+
image: docker:29.1.3-cli@sha256:e0b6ff45302985d99b9685b2a2fec50c3379bd47067493968f51da901dc53ad5
40+
depends_on: [wait-docker]
41+
environment:
42+
DOCKER_HOST: tcp://docker:2375
43+
GHCR_USER:
44+
from_secret: ghcr_username
45+
GHCR_TOKEN:
46+
from_secret: ghcr_token
47+
commands:
48+
- |
49+
set -eu
50+
base_version="$$(sed -n 's/^[[:space:]]*"version": "\([^"]*\)".*/\1/p' package.json | head -n1)"
51+
event="$${CI_PIPELINE_EVENT}"
52+
branch="$${CI_COMMIT_BRANCH:-}"
53+
tag_name="$${CI_COMMIT_TAG:-}"
54+
55+
if [ "$${event}" = "tag" ]; then
56+
version="$${tag_name#v}"
57+
local_repo=registry:5000/typetype/web
58+
ghcr_repo=ghcr.io/typetype-video/typetype
59+
tags="$${version} $${tag_name} latest"
60+
elif [ "$${branch}" = "dev" ]; then
61+
version="$${base_version}-beta.$${CI_PIPELINE_NUMBER}"
62+
local_repo=registry:5000/typetype/web-beta
63+
ghcr_repo=ghcr.io/typetype-video/typetype-beta
64+
tags="dev beta latest $${version}"
65+
else
66+
version="$${base_version}"
67+
local_repo=registry:5000/typetype/web
68+
ghcr_repo=ghcr.io/typetype-video/typetype
69+
tags="main latest $${version}"
70+
fi
71+
72+
build_time="$$(date -u +%Y-%m-%dT%H:%M:%SZ)"
73+
printf '%s' "$${GHCR_TOKEN}" |
74+
docker login ghcr.io -u "$${GHCR_USER}" --password-stdin
75+
76+
docker build --pull \
77+
--build-arg "BUILD_VERSION=$${version}" \
78+
--build-arg "BUILD_REVISION=$${CI_COMMIT_SHA}" \
79+
--build-arg "BUILD_TIME=$${build_time}" \
80+
-t "$${local_repo}:$${version}" .
81+
82+
for tag in $${tags}; do
83+
docker tag "$${local_repo}:$${version}" "$${local_repo}:$${tag}"
84+
docker tag "$${local_repo}:$${version}" "$${ghcr_repo}:$${tag}"
85+
done
86+
87+
for tag in $${tags}; do
88+
docker push "$${local_repo}:$${tag}"
89+
docker push "$${ghcr_repo}:$${tag}"
90+
done
91+
92+
echo "Published $${version}"

0 commit comments

Comments
 (0)