|
1 | | -version: 2 |
| 1 | +version: 2.1 |
| 2 | +parameters: |
| 3 | + cmds: |
| 4 | + type: string |
| 5 | + default: "ssl-status-board" |
| 6 | + |
2 | 7 | jobs: |
3 | | - frontend: |
| 8 | + build_node: |
| 9 | + resource_class: medium |
4 | 10 | docker: |
5 | | - - image: cimg/node:16.15 |
| 11 | + - image: cimg/node:16.20 |
6 | 12 | steps: |
7 | 13 | - checkout |
8 | 14 | - run: |
9 | 15 | name: "Install dependencies" |
10 | | - command: yarn install |
11 | | - - run: |
12 | | - name: "Run lint" |
13 | | - command: yarn lint |
| 16 | + working_directory: frontend |
| 17 | + command: npm install |
14 | 18 | - run: |
15 | 19 | name: "Build" |
16 | | - command: yarn build |
| 20 | + working_directory: frontend |
| 21 | + command: npm run build |
17 | 22 | - persist_to_workspace: |
18 | 23 | root: . |
19 | 24 | paths: |
20 | | - - pkg/board/ui/dist/* |
| 25 | + - frontend/dist/* |
21 | 26 |
|
22 | | - backend: |
| 27 | + test_go: |
| 28 | + resource_class: medium |
23 | 29 | docker: |
24 | | - - image: cimg/go:1.18 |
| 30 | + - image: cimg/go:1.20.2 |
25 | 31 | steps: |
26 | 32 | - checkout |
27 | 33 | - attach_workspace: |
28 | 34 | at: . |
29 | 35 | - run: go get -v -t -d ./... |
30 | 36 | - run: go test -v -covermode=count -coverprofile=count.out ./... |
31 | 37 | - run: go tool cover -html=count.out -o coverage.html |
32 | | - - run: |
33 | | - command: | |
34 | | - GOOS=linux GOARCH=amd64 go build -o release/ssl-status-board_linux_amd64 ./cmd/ssl-status-board |
35 | | - GOOS=linux GOARCH=arm go build -o release/ssl-status-board_linux_arm ./cmd/ssl-status-board |
36 | | - GOOS=linux GOARCH=arm64 go build -o release/ssl-status-board_linux_arm64 ./cmd/ssl-status-board |
37 | | - GOOS=darwin GOARCH=amd64 go build -o release/ssl-status-board_darwin_amd64 ./cmd/ssl-status-board |
38 | | - GOOS=windows GOARCH=amd64 go build -o release/ssl-status-board_windows_amd64.exe ./cmd/ssl-status-board |
39 | | - - run: |
40 | | - command: | |
41 | | - mkdir -p release |
42 | | - cp -a rpi ssl-status-board |
43 | | - tar czf release/bootstrap.tar.gz ssl-status-board |
| 38 | + - store_artifacts: |
| 39 | + path: coverage.html |
| 40 | + destination: coverage |
| 41 | + |
| 42 | + build_go: |
| 43 | + resource_class: large |
| 44 | + docker: |
| 45 | + - image: cimg/go:1.20.2 |
| 46 | + steps: |
| 47 | + - checkout |
| 48 | + - attach_workspace: |
| 49 | + at: . |
| 50 | + - run: go get -v -t -d ./... |
| 51 | + - run: | |
| 52 | + set -u |
| 53 | + version=${CIRCLE_TAG:-} |
| 54 | + for cmd in << pipeline.parameters.cmds >>; do |
| 55 | + GOOS=linux GOARCH=amd64 go build -o ./release/${cmd}_${version}_linux_amd64 ./cmd/${cmd} |
| 56 | + GOOS=linux GOARCH=arm64 go build -o ./release/${cmd}_${version}_linux_arm64 ./cmd/${cmd} |
| 57 | + GOOS=linux GOARCH=arm go build -o ./release/${cmd}_${version}_linux_arm ./cmd/${cmd} |
| 58 | + GOOS=darwin GOARCH=amd64 go build -o ./release/${cmd}_${version}_darwin_amd64 ./cmd/${cmd} |
| 59 | + GOOS=darwin GOARCH=arm64 go build -o ./release/${cmd}_${version}_darwin_arm64 ./cmd/${cmd} |
| 60 | + GOOS=windows GOARCH=amd64 go build -o ./release/${cmd}_${version}_windows_amd64.exe ./cmd/${cmd} |
| 61 | + done |
44 | 62 | - persist_to_workspace: |
45 | 63 | root: . |
46 | 64 | paths: |
47 | 65 | - release/* |
48 | | - - store_artifacts: |
49 | | - path: coverage.html |
50 | | - destination: coverage |
51 | 66 |
|
52 | | - publish-github-release: |
| 67 | + publish_gh: |
| 68 | + resource_class: small |
53 | 69 | docker: |
54 | | - - image: cimg/go:1.18 |
| 70 | + - image: cimg/go:1.20.2 |
55 | 71 | steps: |
56 | 72 | - attach_workspace: |
57 | 73 | at: . |
58 | | - - run: |
59 | | - name: "Prepare artifacts" |
60 | | - working_directory: release |
61 | | - command: | |
62 | | - mv ssl-status-board_linux_amd64 ssl-status-board_${CIRCLE_TAG}_linux_amd64 |
63 | | - mv ssl-status-board_linux_arm ssl-status-board_${CIRCLE_TAG}_linux_arm |
64 | | - mv ssl-status-board_linux_arm64 ssl-status-board_${CIRCLE_TAG}_linux_arm64 |
65 | | - mv ssl-status-board_darwin_amd64 ssl-status-board_${CIRCLE_TAG}_darwin_amd64 |
66 | | - mv ssl-status-board_windows_amd64.exe ssl-status-board_${CIRCLE_TAG}_windows_amd64.exe |
67 | | - - run: |
68 | | - name: "Publish Release on GitHub" |
69 | | - command: | |
70 | | - go install github.com/tcnksm/[email protected] |
71 | | - ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${CIRCLE_TAG} ./release/ |
| 74 | + - run: | |
| 75 | + mkdir -p release |
| 76 | + cp -a rpi ssl-status-board |
| 77 | + tar czf release/bootstrap.tar.gz ssl-status-board |
| 78 | + - run: | |
| 79 | + set -u |
| 80 | + go install github.com/tcnksm/[email protected] |
| 81 | + ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete -generatenotes ${CIRCLE_TAG} ./release |
72 | 82 |
|
73 | | - docker-build: |
| 83 | + build_docker: |
| 84 | + resource_class: small |
74 | 85 | docker: |
75 | | - - image: cimg/base:2022.06 |
| 86 | + - image: cimg/base:2023.04 |
76 | 87 | steps: |
77 | 88 | - checkout |
78 | 89 | - setup_remote_docker: |
79 | | - version: 20.10.11 |
| 90 | + version: 20.10.18 |
80 | 91 | - run: | |
81 | | - docker build . |
| 92 | + for cmd in << pipeline.parameters.cmds >>; do |
| 93 | + docker build --build-arg cmd=${cmd} -t robocupssl/${cmd}:latest . |
| 94 | + done |
82 | 95 |
|
83 | | - docker-build-and-push: |
| 96 | + publish_docker: |
| 97 | + resource_class: small |
84 | 98 | docker: |
85 | | - - image: cimg/base:2022.06 |
| 99 | + - image: cimg/base:2023.04 |
86 | 100 | steps: |
87 | 101 | - checkout |
88 | 102 | - setup_remote_docker: |
89 | | - version: 20.10.11 |
| 103 | + version: 20.10.18 |
90 | 104 | - run: | |
| 105 | + # Parse version from tag (removing 'v' prefix) |
91 | 106 | TAG=${CIRCLE_TAG:1} |
92 | 107 | TAG=${TAG:-latest} |
93 | | - docker build -t robocupssl/ssl-status-board:$TAG . |
94 | | - docker login -u "${DOCKER_HUB_USERNAME}" -p "${DOCKER_HUB_PASSWORD}" |
95 | | - docker push robocupssl/ssl-status-board:$TAG |
| 108 | + for cmd in << pipeline.parameters.cmds >>; do |
| 109 | + docker build --build-arg cmd=${cmd} -t robocupssl/${cmd}:${TAG} . |
| 110 | + docker login -u "${DOCKER_HUB_USERNAME}" -p "${DOCKER_HUB_PASSWORD}" |
| 111 | + docker push robocupssl/${cmd}:${TAG} |
| 112 | + done |
96 | 113 |
|
97 | 114 | workflows: |
98 | 115 | version: 2 |
99 | | - main: |
| 116 | + build: |
100 | 117 | jobs: |
101 | | - - frontend: |
102 | | - filters: |
103 | | - tags: |
104 | | - only: /.*/ |
105 | | - - backend: |
106 | | - requires: |
107 | | - - frontend |
108 | | - filters: |
109 | | - tags: |
110 | | - only: /.*/ |
111 | | - - publish-github-release: |
| 118 | + - build_node |
| 119 | + - test_go: |
| 120 | + requires: [ build_node ] |
| 121 | + release: |
| 122 | + jobs: |
| 123 | + - build_node: |
| 124 | + filters: { branches: { ignore: /.*/ }, tags: { only: /^v.*/ } } |
| 125 | + - build_go: |
| 126 | + requires: [ build_node ] |
| 127 | + filters: { branches: { ignore: /.*/ }, tags: { only: /^v.*/ } } |
| 128 | + - publish_gh: |
112 | 129 | context: github |
113 | | - requires: |
114 | | - - backend |
115 | | - filters: |
116 | | - branches: |
117 | | - ignore: /.*/ |
118 | | - tags: |
119 | | - only: /^v.*/ |
120 | | - - docker-build: |
121 | | - context: docker hub |
122 | | - filters: |
123 | | - branches: |
124 | | - ignore: master |
125 | | - - docker-build-and-push: |
| 130 | + requires: [ build_go ] |
| 131 | + filters: { branches: { ignore: /.*/ }, tags: { only: /^v.*/ } } |
| 132 | + docker: |
| 133 | + jobs: |
| 134 | + - build_docker |
| 135 | + - publish_docker: |
126 | 136 | context: docker hub |
127 | | - filters: |
128 | | - branches: |
129 | | - only: master |
130 | | - tags: |
131 | | - only: /^v.*/ |
| 137 | + filters: { branches: { only: master }, tags: { only: /^v.*/ } } |
0 commit comments