diff --git a/.circleci/build.yml b/.circleci/build.yml new file mode 100644 index 000000000..e3e0073f6 --- /dev/null +++ b/.circleci/build.yml @@ -0,0 +1,120 @@ +version: 2.1 + +# Passed from config.yml +parameters: + skip: + type: boolean + default: true + +defaults: &defaults + resource_class: large + docker: + - image: bepsays/ci-hugoreleaser:1.22300.20000 +environment: &buildenv + GOMODCACHE: /root/project/gomodcache +jobs: + prepare_release: + <<: *defaults + environment: &buildenv + GOMODCACHE: /root/project/gomodcache + steps: + - &remote-docker + setup_remote_docker: + version: 20.10.14 + - checkout: + path: hugo + - &git-config + run: + command: | + git config --global user.email "bjorn.erik.pedersen+hugoreleaser@gmail.com" + git config --global user.name "hugoreleaser" + - run: + command: | + cd hugo + go mod download + go run -tags release main.go release --step 1 + - save_cache: + key: git-sha-{{ .Revision }} + paths: + - hugo + - gomodcache + build_container1: + <<: [*defaults] + environment: + <<: [*buildenv] + steps: + - &restore-cache + restore_cache: + key: git-sha-{{ .Revision }} + - run: + no_output_timeout: 20m + command: | + mkdir -p /tmp/files/dist1 + cd hugo + hugoreleaser build -paths "builds/container1/**" -workers 3 -dist /tmp/files/dist1 -chunks $CIRCLE_NODE_TOTAL -chunk-index $CIRCLE_NODE_INDEX + - &persist-workspace + persist_to_workspace: + root: /tmp/files + paths: + - dist1 + - dist2 + parallelism: 7 + build_container2: + <<: [*defaults] + environment: + <<: [*buildenv] + docker: + - image: bepsays/ci-hugoreleaser-linux-arm64:1.22300.20000 + steps: + - *restore-cache + - &attach-workspace + attach_workspace: + at: /tmp/workspace + - run: + command: | + mkdir -p /tmp/files/dist2 + cd hugo + hugoreleaser build -paths "builds/container2/**" -workers 1 -dist /tmp/files/dist2 + - *persist-workspace + archive_and_release: + <<: [*defaults] + environment: + <<: [*buildenv] + steps: + - *restore-cache + - *attach-workspace + - *git-config + - run: + name: Add github.com to known hosts + command: ssh-keyscan github.com >> ~/.ssh/known_hosts + - run: + command: | + cp -a /tmp/workspace/dist1/. ./hugo/dist + cp -a /tmp/workspace/dist2/. ./hugo/dist + - run: + command: | + cd hugo + hugoreleaser archive + hugoreleaser release + go run -tags release main.go release --step 2 +workflows: + release: + when: + and: + - equal: [false, << pipeline.parameters.skip >>] + jobs: + - prepare_release: + filters: + branches: + only: /release-.*/ + - build_container1: + requires: + - prepare_release + - build_container2: + requires: + - prepare_release + - archive_and_release: + context: org-global + requires: + - build_container1 + - build_container2 diff --git a/.circleci/config.yml b/.circleci/config.yml index 0ff955936..588d3d894 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,117 +1,27 @@ -parameters: - -# v2: 11m. -defaults: &defaults - resource_class: large - docker: - - image: bepsays/ci-hugoreleaser:1.22300.20000 -environment: &buildenv - GOMODCACHE: /root/project/gomodcache -version: 2 +version: 2.1 +setup: true +orbs: + continuation: circleci/continuation@1 jobs: - prepare_release: - <<: *defaults - environment: &buildenv - GOMODCACHE: /root/project/gomodcache - steps: - - &remote-docker - setup_remote_docker: - version: 20.10.14 - - checkout: - path: hugo - - &git-config - run: - command: | - git config --global user.email "bjorn.erik.pedersen+hugoreleaser@gmail.com" - git config --global user.name "hugoreleaser" - - run: - command: | - cd hugo - go mod download - go run -tags release main.go release --step 1 - - save_cache: - key: git-sha-{{ .Revision }} - paths: - - hugo - - gomodcache - build_container1: - <<: [*defaults] - environment: - <<: [*buildenv] - steps: - - &restore-cache - restore_cache: - key: git-sha-{{ .Revision }} - - run: - no_output_timeout: 20m - command: | - mkdir -p /tmp/files/dist1 - cd hugo - hugoreleaser build -paths "builds/container1/**" -workers 3 -dist /tmp/files/dist1 -chunks $CIRCLE_NODE_TOTAL -chunk-index $CIRCLE_NODE_INDEX - - &persist-workspace - persist_to_workspace: - root: /tmp/files - paths: - - dist1 - - dist2 - parallelism: 7 - build_container2: - <<: [*defaults] - environment: - <<: [*buildenv] + setup: docker: - - image: bepsays/ci-hugoreleaser-linux-arm64:1.22300.20000 + - image: cimg/go:1.21 steps: - - *restore-cache - - &attach-workspace - attach_workspace: - at: /tmp/workspace + - checkout - run: command: | - mkdir -p /tmp/files/dist2 - cd hugo - hugoreleaser build -paths "builds/container2/**" -workers 1 -dist /tmp/files/dist2 - - *persist-workspace - archive_and_release: - <<: [*defaults] - environment: - <<: [*buildenv] - steps: - - *restore-cache - - *attach-workspace - - *git-config - - run: - name: Add github.com to known hosts - command: ssh-keyscan github.com >> ~/.ssh/known_hosts - - run: - command: | - cp -a /tmp/workspace/dist1/. ./hugo/dist - cp -a /tmp/workspace/dist2/. ./hugo/dist - - run: - command: | - cd hugo - hugoreleaser archive - hugoreleaser release - go run -tags release main.go release --step 2 + export SKIP=$(git log -n 1 $CIRCLE_SHA1 --pretty=%B | grep -q "NOCIRCLECI" && echo "true" || echo "false") + echo "{\"skip\": $SKIP}" >> set-up-params.json + - continuation/continue: + parameters: set-up-params.json + configuration_path: .circleci/build.yml + workflows: - version: 2 - release: - jobs: - - prepare_release: - filters: - branches: - only: /release-.*/ - - build_container1: - requires: - - prepare_release - - build_container2: - requires: - - prepare_release - - archive_and_release: - context: org-global - requires: - - build_container1 - - build_container2 - - - + configure: + when: + and: + - matches: + pattern: "^release.+" + value: << pipeline.git.branch >> + jobs: + - setup diff --git a/releaser/releaser.go b/releaser/releaser.go index f2244842a..953d33bdc 100644 --- a/releaser/releaser.go +++ b/releaser/releaser.go @@ -101,7 +101,8 @@ func (r *ReleaseHandler) Run() error { return err } - if _, err := r.git("commit", "-a", "-m", fmt.Sprintf("%s Bump versions for release of %s\n\n[ci skip]", commitPrefix, newVersion)); err != nil { + // The reason we use NOCIRCLECI, see https://github.com/gohugoio/hugo/issues/12753 + if _, err := r.git("commit", "-a", "-m", fmt.Sprintf("%s Bump versions for release of %s\n\nNOCIRCLECI", commitPrefix, newVersion)); err != nil { return err }