variables: - &golang_image 'docker.io/golang:1.23' - &node_image 'docker.io/node:23-alpine' - &alpine_image 'docker.io/alpine:3.20' - 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} - renovate/* - 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.2 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]