woodpecker/.woodpecker/docs.yaml

154 lines
4.3 KiB
YAML

variables:
- &golang_image 'docker.io/golang:1.23'
- &node_image 'docker.io/node:23-alpine'
- &alpine_image 'docker.io/alpine:3.21'
- path: &when_path
- 'docs/**'
- '.woodpecker/docs.yaml'
# since we generate docs for cli tool we have to watch this too
- 'cli/**'
- 'cmd/cli/**'
# api docs
- 'server/api/**'
- path: &docker_path # web source code
- 'web/**'
# api source code
- 'server/api/**'
# go source code
- '**/*.go'
- 'go.*'
# schema changes
- 'pipeline/schema/**'
# Dockerfile changes
- 'docker/**'
when:
- event: tag
- event: pull_request
- event: push
path:
- <<: *when_path
- <<: *docker_path
branch:
- ${CI_REPO_DEFAULT_BRANCH}
- event: pull_request_closed
path: *when_path
- event: manual
evaluate: 'TASK == "docs"'
steps:
build-cli:
image: *golang_image
commands:
- make docs
when:
- path: *when_path
event: [tag, pull_request, push]
- event: manual
build:
image: *node_image
directory: docs/
commands:
- corepack enable
- pnpm install --frozen-lockfile
- pnpm build
when:
- path: *when_path
event: [tag, pull_request, push]
- event: manual
deploy-preview:
image: docker.io/woodpeckerci/plugin-surge-preview:1.3.3
settings:
path: 'docs/build/'
surge_token:
from_secret: SURGE_TOKEN
forge_repo_token:
from_secret: GITHUB_TOKEN_SURGE
failure: ignore
when:
event: [pull_request, pull_request_closed]
path: *when_path
deploy-prepare:
image: *alpine_image
environment:
BOT_PRIVATE_KEY:
from_secret: BOT_PRIVATE_KEY
commands:
- apk add openssh-client git
- mkdir -p $HOME/.ssh
- ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts
- echo "$BOT_PRIVATE_KEY" > $HOME/.ssh/id_rsa
- chmod 0600 $HOME/.ssh/id_rsa
- git clone --depth 1 --single-branch git@github.com:woodpecker-ci/woodpecker-ci.github.io.git ./docs_repo
when:
- event: push
path:
- <<: *when_path
- <<: *docker_path
branch: ${CI_REPO_DEFAULT_BRANCH}
- event: [manual, tag]
# update latest and next version
version-next:
image: *alpine_image
commands:
- apk add jq
- jq '.next = "next-${CI_COMMIT_SHA:0:10}"' ./docs_repo/version.json > ./docs_repo/version.json.tmp
- mv ./docs_repo/version.json.tmp ./docs_repo/version.json
when:
- event: push
path: *docker_path
branch: ${CI_REPO_DEFAULT_BRANCH}
version-release:
image: *alpine_image
commands:
- apk add jq
- if [[ "${CI_COMMIT_TAG}" != *"rc"* ]] ; then jq '.latest = "${CI_COMMIT_TAG}"' ./docs_repo/version.json > ./docs_repo/version.json.tmp && mv ./docs_repo/version.json.tmp ./docs_repo/version.json ; fi
- jq '.rc = "${CI_COMMIT_TAG}"' ./docs_repo/version.json > ./docs_repo/version.json.tmp
- mv ./docs_repo/version.json.tmp ./docs_repo/version.json
when:
- event: tag
copy-files:
image: *alpine_image
commands:
- apk add rsync
# copy all docs files and delete all old ones, but leave CNAME, index.yaml and version.json untouched
- rsync -r --exclude .git --exclude CNAME --exclude index.yaml --exclude README.md --exclude version.json --delete docs/build/ ./docs_repo
when:
- event: push
path: *when_path
branch: ${CI_REPO_DEFAULT_BRANCH}
- event: manual
deploy:
image: *alpine_image
environment:
BOT_PRIVATE_KEY:
from_secret: BOT_PRIVATE_KEY
commands:
- apk add openssh-client rsync git
- mkdir -p $HOME/.ssh
- ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts
- echo "$BOT_PRIVATE_KEY" > $HOME/.ssh/id_rsa
- chmod 0600 $HOME/.ssh/id_rsa
- git config --global user.email "woodpecker-bot@obermui.de"
- git config --global user.name "woodpecker-bot"
- cd ./docs_repo
- git add .
# exit successfully if nothing changed
- test -n "$(git status --porcelain)" || exit 0
- git commit -m "Deploy website - based on ${CI_COMMIT_SHA}"
- git push
when:
- event: push
path:
- <<: *when_path
- <<: *docker_path
branch: ${CI_REPO_DEFAULT_BRANCH}
- event: [manual, tag]