|
| 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