|
1 | | -version: 2 |
| 1 | +version: 2.1 |
| 2 | +parameters: |
| 3 | + cmds: |
| 4 | + type: string |
| 5 | + default: "ssl-simulation-controller" |
| 6 | + |
2 | 7 | jobs: |
3 | | - app: |
| 8 | + test_go: |
| 9 | + resource_class: medium |
4 | 10 | docker: |
5 | | - - image: cimg/go:1.23@sha256:7ad5b6d5a429411e365f93a685cd8902c42ac19875e866d8723551c03f9f3da7 |
6 | | - |
| 11 | + - image: cimg/go:1.23.5@sha256:d9d2cd7d194f229721b28b24c4ca5d8b6876b90e67ca6329943e202940288269 |
7 | 12 | steps: |
8 | 13 | - checkout |
| 14 | + - attach_workspace: |
| 15 | + at: . |
9 | 16 | - run: go get -v -t -d ./... |
10 | 17 | - run: go test -v -covermode=count -coverprofile=count.out ./... |
11 | 18 | - run: go tool cover -html=count.out -o coverage.html |
12 | | - - run: |
13 | | - working_directory: cmd/ssl-simulation-controller |
14 | | - command: | |
15 | | - GOOS=linux GOARCH=amd64 go build -o ../../release/ssl-simulation-controller_linux_amd64 |
16 | | - GOOS=darwin GOARCH=amd64 go build -o ../../release/ssl-simulation-controller_darwin_amd64 |
17 | | - GOOS=windows GOARCH=amd64 go build -o ../../release/ssl-simulation-controller_windows_amd64.exe |
| 19 | + - store_artifacts: |
| 20 | + path: coverage.html |
| 21 | + destination: coverage |
| 22 | + |
| 23 | + build_go: |
| 24 | + resource_class: large |
| 25 | + docker: |
| 26 | + - image: cimg/go:1.23.5@sha256:d9d2cd7d194f229721b28b24c4ca5d8b6876b90e67ca6329943e202940288269 |
| 27 | + steps: |
| 28 | + - checkout |
| 29 | + - attach_workspace: |
| 30 | + at: . |
| 31 | + - run: go get -v -t -d ./... |
| 32 | + - run: | |
| 33 | + set -u |
| 34 | + version=${CIRCLE_TAG:-} |
| 35 | + for cmd in << pipeline.parameters.cmds >>; do |
| 36 | + GOOS=linux GOARCH=amd64 go build -o ./release/${cmd}_${version}_linux_amd64 ./cmd/${cmd} |
| 37 | + GOOS=linux GOARCH=arm64 go build -o ./release/${cmd}_${version}_linux_arm64 ./cmd/${cmd} |
| 38 | + GOOS=linux GOARCH=arm go build -o ./release/${cmd}_${version}_linux_arm ./cmd/${cmd} |
| 39 | + GOOS=darwin GOARCH=amd64 go build -o ./release/${cmd}_${version}_darwin_amd64 ./cmd/${cmd} |
| 40 | + GOOS=darwin GOARCH=arm64 go build -o ./release/${cmd}_${version}_darwin_arm64 ./cmd/${cmd} |
| 41 | + GOOS=windows GOARCH=amd64 go build -o ./release/${cmd}_${version}_windows_amd64.exe ./cmd/${cmd} |
| 42 | + done |
18 | 43 | - persist_to_workspace: |
19 | 44 | root: . |
20 | 45 | paths: |
21 | 46 | - release/* |
22 | | - - store_artifacts: |
23 | | - path: coverage.html |
24 | | - destination: coverage |
25 | 47 |
|
26 | | - publish-github-release: |
| 48 | + publish_gh: |
| 49 | + resource_class: small |
27 | 50 | docker: |
28 | | - - image: cimg/go:1.23@sha256:7ad5b6d5a429411e365f93a685cd8902c42ac19875e866d8723551c03f9f3da7 |
| 51 | + - image: cimg/go:1.23.5@sha256:d9d2cd7d194f229721b28b24c4ca5d8b6876b90e67ca6329943e202940288269 |
29 | 52 | steps: |
30 | 53 | - attach_workspace: |
31 | 54 | at: . |
32 | | - - run: |
33 | | - name: "Prepare artifacts" |
34 | | - working_directory: release |
35 | | - command: | |
36 | | - mv ssl-simulation-controller_linux_amd64 ssl-simulation-controller_${CIRCLE_TAG}_linux_amd64 |
37 | | - mv ssl-simulation-controller_darwin_amd64 ssl-simulation-controller_${CIRCLE_TAG}_darwin_amd64 |
38 | | - mv ssl-simulation-controller_windows_amd64.exe ssl-simulation-controller_${CIRCLE_TAG}_windows_amd64.exe |
39 | | - - run: |
40 | | - name: "Publish Release on GitHub" |
41 | | - command: | |
42 | | - go install github.com/tcnksm/[email protected] |
43 | | - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${CIRCLE_TAG} ./release/ |
| 55 | + - run: | |
| 56 | + set -u |
| 57 | + go install github.com/tcnksm/[email protected] |
| 58 | + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete -generatenotes ${CIRCLE_TAG} ./release |
44 | 59 |
|
45 | | - docker: |
| 60 | + build_docker: |
| 61 | + resource_class: small |
46 | 62 | docker: |
47 | 63 | - image: cimg/base:2025.01@sha256:f6b81723236539a091130e4f0e57c599253abf2e3980aa4e60eeee871b4e2ef7 |
48 | 64 | steps: |
49 | 65 | - checkout |
50 | 66 | - setup_remote_docker |
51 | 67 | - run: | |
| 68 | + docker buildx create \ |
| 69 | + --name container-builder \ |
| 70 | + --driver docker-container \ |
| 71 | + --bootstrap --use |
| 72 | + for cmd in << pipeline.parameters.cmds >>; do |
| 73 | + docker buildx build --platform linux/amd64,linux/arm64 --build-arg cmd=${cmd} -t robocupssl/${cmd}:latest . |
| 74 | + done |
| 75 | +
|
| 76 | + publish_docker: |
| 77 | + resource_class: small |
| 78 | + docker: |
| 79 | + - image: cimg/base:2025.01@sha256:f6b81723236539a091130e4f0e57c599253abf2e3980aa4e60eeee871b4e2ef7 |
| 80 | + steps: |
| 81 | + - checkout |
| 82 | + - setup_remote_docker |
| 83 | + - run: | |
| 84 | + docker buildx create \ |
| 85 | + --name container-builder \ |
| 86 | + --driver docker-container \ |
| 87 | + --bootstrap --use |
| 88 | + |
| 89 | + # Parse version from tag (removing 'v' prefix) |
52 | 90 | TAG=${CIRCLE_TAG:1} |
53 | 91 | TAG=${TAG:-latest} |
54 | | - docker build -t robocupssl/ssl-simulation-controller:$TAG . |
55 | | - docker login -u "${DOCKER_HUB_USERNAME}" -p "${DOCKER_HUB_PASSWORD}" |
56 | | - docker push robocupssl/ssl-simulation-controller:$TAG |
| 92 | + for cmd in << pipeline.parameters.cmds >>; do |
| 93 | + docker login -u "${DOCKER_HUB_USERNAME}" -p "${DOCKER_HUB_PASSWORD}" |
| 94 | + docker buildx build --platform linux/amd64,linux/arm64 --build-arg cmd=${cmd} -t robocupssl/${cmd}:${TAG} --push . |
| 95 | + done |
57 | 96 |
|
58 | 97 | workflows: |
59 | 98 | version: 2 |
60 | | - main: |
| 99 | + build: |
| 100 | + jobs: |
| 101 | + - test_go |
| 102 | + release: |
61 | 103 | jobs: |
62 | | - - app: |
63 | | - filters: |
64 | | - tags: |
65 | | - only: /.*/ |
66 | | - - publish-github-release: |
| 104 | + - build_go: |
| 105 | + filters: { branches: { ignore: /.*/ }, tags: { only: /^v.*/ } } |
| 106 | + - publish_gh: |
67 | 107 | context: github |
68 | | - requires: |
69 | | - - app |
70 | | - filters: |
71 | | - branches: |
72 | | - ignore: /.*/ |
73 | | - tags: |
74 | | - only: /^v.*/ |
75 | | - - docker: |
| 108 | + requires: [ build_go ] |
| 109 | + filters: { branches: { ignore: /.*/ }, tags: { only: /^v.*/ } } |
| 110 | + docker: |
| 111 | + jobs: |
| 112 | + - build_docker: |
| 113 | + filters: { branches: { ignore: master } } |
| 114 | + - publish_docker: |
76 | 115 | context: docker hub |
77 | | - filters: |
78 | | - branches: |
79 | | - only: master |
80 | | - tags: |
81 | | - only: /^v.*/ |
82 | | - |
| 116 | + filters: { branches: { only: master }, tags: { only: /^v.*/ } } |
0 commit comments