Skip to content

Commit 6cfd4bc

Browse files
authored
Merge pull request #27 from per1234/release-go
Make initial import of Go release system templates
2 parents d35746d + a2053c9 commit 6cfd4bc

File tree

9 files changed

+1015
-0
lines changed

9 files changed

+1015
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/release-go-task/DistTasks.yml
2+
version: "3"
3+
4+
# This taskfile is ideally meant to be project agnostic and could be dropped in
5+
# on other Go projects with minimal or no changes.
6+
#
7+
# To use it simply add the following lines to your main taskfile:
8+
# includes:
9+
# dist: ./DistTasks.yml
10+
#
11+
# The following variables must be declared in the including taskfile for the
12+
# build process to work correctly:
13+
# * DIST_DIR: the folder that will contain the final binaries and packages
14+
# * PROJECT_NAME: the name of the project, used in package name
15+
# * VERSION: the version of the project, used in package name and checksum file
16+
# * LD_FLAGS: flags used at build time
17+
#
18+
# The project MUST contain a LICENSE.txt file in the root folder or packaging will fail.
19+
20+
tasks:
21+
all:
22+
desc: Build for distribution for all platforms
23+
cmds:
24+
- task: Windows_32bit
25+
- task: Windows_64bit
26+
- task: Linux_32bit
27+
- task: Linux_64bit
28+
- task: Linux_ARMv6
29+
- task: Linux_ARMv7
30+
- task: Linux_ARM64
31+
- task: macOS_64bit
32+
33+
Windows_32bit:
34+
desc: Builds Windows 32 bit binaries
35+
dir: "{{ .DIST_DIR }}"
36+
cmds:
37+
- |
38+
docker run -v `pwd`/..:/home/build -w /home/build \
39+
-e CGO_ENABLED=1 \
40+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
41+
--build-cmd "{{ .BUILD_COMMAND }}" \
42+
-p "{{ .BUILD_PLATFORM }}"
43+
44+
zip {{ .PACKAGE_NAME}} {{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe ../LICENSE.txt -j
45+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
46+
47+
vars:
48+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_windows_386"
49+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .LDFLAGS }}"
50+
BUILD_PLATFORM: "windows/386"
51+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
52+
PACKAGE_PLATFORM: "Windows_32bit"
53+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"
54+
55+
Windows_64bit:
56+
desc: Builds Windows 64 bit binaries
57+
dir: "{{ .DIST_DIR }}"
58+
cmds:
59+
- |
60+
docker run -v `pwd`/..:/home/build -w /home/build \
61+
-e CGO_ENABLED=1 \
62+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
63+
--build-cmd "{{ .BUILD_COMMAND }}" \
64+
-p "{{ .BUILD_PLATFORM }}"
65+
66+
zip {{ .PACKAGE_NAME}} {{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe ../LICENSE.txt -j
67+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
68+
69+
vars:
70+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_windows_amd64"
71+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .LDFLAGS }}"
72+
BUILD_PLATFORM: "windows/amd64"
73+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
74+
PACKAGE_PLATFORM: "Windows_64bit"
75+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"
76+
77+
Linux_32bit:
78+
desc: Builds Linux 32 bit binaries
79+
dir: "{{ .DIST_DIR }}"
80+
cmds:
81+
- |
82+
docker run -v `pwd`/..:/home/build -w /home/build \
83+
-e CGO_ENABLED=1 \
84+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
85+
--build-cmd "{{ .BUILD_COMMAND }}" \
86+
-p "{{ .BUILD_PLATFORM }}"
87+
88+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
89+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
90+
91+
vars:
92+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_amd32"
93+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
94+
BUILD_PLATFORM: "linux/386"
95+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
96+
PACKAGE_PLATFORM: "Linux_32bit"
97+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
98+
99+
Linux_64bit:
100+
desc: Builds Linux 64 bit binaries
101+
dir: "{{ .DIST_DIR }}"
102+
cmds:
103+
- |
104+
docker run -v `pwd`/..:/home/build -w /home/build \
105+
-e CGO_ENABLED=1 \
106+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
107+
--build-cmd "{{ .BUILD_COMMAND }}" \
108+
-p "{{ .BUILD_PLATFORM }}"
109+
110+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
111+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
112+
113+
vars:
114+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_amd64"
115+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
116+
BUILD_PLATFORM: "linux/amd64"
117+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
118+
PACKAGE_PLATFORM: "Linux_64bit"
119+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
120+
121+
Linux_ARMv7:
122+
desc: Builds Linux ARMv7 binaries
123+
dir: "{{ .DIST_DIR }}"
124+
cmds:
125+
- |
126+
docker run -v `pwd`/..:/home/build -w /home/build \
127+
-e CGO_ENABLED=1 \
128+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
129+
--build-cmd "{{ .BUILD_COMMAND }}" \
130+
-p "{{ .BUILD_PLATFORM }}"
131+
132+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
133+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
134+
135+
vars:
136+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_7"
137+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
138+
BUILD_PLATFORM: "linux/armv7"
139+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
140+
PACKAGE_PLATFORM: "Linux_ARMv7"
141+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
142+
143+
Linux_ARMv6:
144+
desc: Builds Linux ARMv6 binaries
145+
dir: "{{ .DIST_DIR }}"
146+
cmds:
147+
- |
148+
docker run -v `pwd`/..:/home/build -w /home/build \
149+
-e CGO_ENABLED=1 \
150+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
151+
--build-cmd "{{ .BUILD_COMMAND }}" \
152+
-p "{{ .BUILD_PLATFORM }}"
153+
154+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
155+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
156+
157+
vars:
158+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
159+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
160+
BUILD_PLATFORM: "linux/armv6"
161+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
162+
PACKAGE_PLATFORM: "Linux_ARMv6"
163+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
164+
165+
Linux_ARM64:
166+
desc: Builds Linux ARM64 binaries
167+
dir: "{{ .DIST_DIR }}"
168+
cmds:
169+
- |
170+
docker run -v `pwd`/..:/home/build -w /home/build \
171+
-e CGO_ENABLED=1 \
172+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
173+
--build-cmd "{{ .BUILD_COMMAND }}" \
174+
-p "{{ .BUILD_PLATFORM }}"
175+
176+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
177+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
178+
179+
vars:
180+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
181+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
182+
BUILD_PLATFORM: "linux/arm64"
183+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
184+
PACKAGE_PLATFORM: "Linux_ARM64"
185+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
186+
187+
macOS_64bit:
188+
desc: Builds Mac OS X 64 bit binaries
189+
dir: "{{ .DIST_DIR }}"
190+
cmds:
191+
- |
192+
docker run -v `pwd`/..:/home/build -w /home/build \
193+
-e CGO_ENABLED=1 \
194+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
195+
--build-cmd "{{ .BUILD_COMMAND }}" \
196+
-p "{{ .BUILD_PLATFORM }}"
197+
198+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
199+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
200+
201+
vars:
202+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_osx_darwin_amd64"
203+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .LDFLAGS }}"
204+
BUILD_PLATFORM: "darwin/amd64"
205+
CONTAINER_TAG: "{{ .GO_VERSION }}-darwin"
206+
PACKAGE_PLATFORM: "macOS_64bit"
207+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
208+
209+
vars:
210+
CONTAINER: "docker.elastic.co/beats-dev/golang-crossbuild"
211+
GO_VERSION: "1.14.7"
212+
CHECKSUM_FILE: "{{ .VERSION }}-checksums.txt"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# See: https://taskfile.dev/#/usage
2+
version: "3"
3+
4+
includes:
5+
dist: ./DistTasks.yml
6+
7+
vars:
8+
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/release-go-task/Taskfile.yml
9+
PROJECT_NAME: "arduino-cli"
10+
DIST_DIR: "dist"
11+
# build vars
12+
COMMIT:
13+
sh: echo "$(git log -n 1 --format=%h)"
14+
TIMESTAMP:
15+
sh: echo "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
16+
TIMESTAMP_SHORT:
17+
sh: echo "{{now | date "20060102"}}"
18+
TAG:
19+
sh: echo "`git tag --points-at=HEAD 2> /dev/null | head -n1`"
20+
VERSION: "{{ if .NIGHTLY }}nightly-{{ .TIMESTAMP_SHORT }}{{ else if .TAG }}{{ .TAG }}{{ else }}{{ .PACKAGE_NAME_PREFIX }}git-snapshot{{ end }}"
21+
LDFLAGS: >
22+
-ldflags
23+
'
24+
-X github.com/arduino/arduino-cli/version.versionString={{.VERSION}}
25+
-X github.com/arduino/arduino-cli/version.commit={{ .COMMIT }}
26+
-X github.com/arduino/arduino-cli/version.date={{.TIMESTAMP}}
27+
'
28+
29+
tasks: {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/release-go-task/gon.config.hcl
2+
# See: https://github.com/mitchellh/gon#configuration-file
3+
source = ["dist/arduino-cli_osx_darwin_amd64/arduino-cli"]
4+
bundle_id = "cc.arduino.arduino-cli"
5+
6+
sign {
7+
application_identity = "Developer ID Application: ARDUINO SA (7KT7ZWMCJT)"
8+
}
9+
10+
# Ask Gon for zip output to force notarization process to take place.
11+
# The CI will ignore the zip output, using the signed binary only.
12+
zip {
13+
output_path = "arduino-cli.zip"
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# Source: https://github.com/arduino/.github/blob/master/workflow-templates/publish-go-nightly-task.md
2+
name: Publish Nightly Build
3+
4+
on:
5+
schedule:
6+
# run every day at 1AM
7+
- cron: "0 1 * * *"
8+
9+
jobs:
10+
create-nightly-artifacts:
11+
# This workflow is only of value to the arduino/arduino-cli repository and
12+
# would always fail in forks
13+
if: github.repository == 'arduino/arduino-cli'
14+
runs-on: ubuntu-latest
15+
16+
steps:
17+
- name: Checkout repository
18+
uses: actions/checkout@v1
19+
with:
20+
fetch-depth: 0
21+
22+
- name: Install Taskfile
23+
uses: arduino/setup-task@v1
24+
with:
25+
repo-token: ${{ secrets.GITHUB_TOKEN }}
26+
version: 3.x
27+
28+
- name: Build
29+
env:
30+
NIGHTLY: true
31+
run: task dist:all
32+
33+
- name: Upload artifacts
34+
uses: actions/upload-artifact@v2
35+
with:
36+
name: dist
37+
path: dist
38+
39+
notarize-macos:
40+
runs-on: macos-latest
41+
needs: create-nightly-artifacts
42+
43+
steps:
44+
- name: Checkout repository
45+
uses: actions/checkout@v2
46+
47+
- name: Download artifacts
48+
uses: actions/download-artifact@v2
49+
with:
50+
name: dist
51+
# to ensure compatibility with v1
52+
path: dist
53+
54+
- name: Import Code-Signing Certificates
55+
env:
56+
KEYCHAIN: "sign.keychain"
57+
INSTALLER_CERT_MAC_PATH: "/tmp/ArduinoCerts2020.p12"
58+
run: |
59+
echo "${{ secrets.INSTALLER_CERT_MAC_P12 }}" | base64 --decode > "${{ env.INSTALLER_CERT_MAC_PATH }}"
60+
security create-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" "${{ env.KEYCHAIN }}"
61+
security default-keychain -s "${{ env.KEYCHAIN }}"
62+
security unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" "${{ env.KEYCHAIN }}"
63+
security import "${{ env.INSTALLER_CERT_MAC_PATH }}" -k "${{ env.KEYCHAIN }}" -f pkcs12 -A -T /usr/bin/codesign -P "${{ secrets.INSTALLER_CERT_MAC_PASSWORD }}"
64+
security set-key-partition-list -S apple-tool:,apple: -s -k "${{ secrets.KEYCHAIN_PASSWORD }}" "${{ env.KEYCHAIN }}"
65+
66+
- name: Install gon for code signing and app notarization
67+
run: |
68+
wget -q https://github.com/mitchellh/gon/releases/download/v0.2.3/gon_macos.zip
69+
unzip gon_macos.zip -d /usr/local/bin
70+
71+
- name: Sign and notarize binary
72+
env:
73+
AC_USERNAME: ${{ secrets.AC_USERNAME }}
74+
AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
75+
run: |
76+
gon gon.config.hcl
77+
78+
- name: Re-package binary and update checksum
79+
# This step performs the following:
80+
# 1. Repackage the signed binary replaced in place by Gon (ignoring the output zip file)
81+
# 2. Recalculate package checksum and replace it in the nnnnnn-checksums.txt file
82+
run: |
83+
# GitHub's upload/download-artifact@v2 actions don't preserve file permissions,
84+
# so we need to add execution permission back until the action is made to do this.
85+
chmod +x dist/arduino-cli_osx_darwin_amd64/arduino-cli
86+
PACKAGE_FILENAME="$(basename dist/arduino-cli_nightly-*_macOS_64bit.tar.gz)"
87+
tar -czvf "dist/$PACKAGE_FILENAME" \
88+
-C dist/arduino-cli_osx_darwin_amd64/ arduino-cli \
89+
-C ../../ LICENSE.txt
90+
CLI_CHECKSUM="$(shasum -a 256 "dist/$PACKAGE_FILENAME" | cut -d " " -f 1)"
91+
perl -pi -w -e "s/.*${PACKAGE_FILENAME}/${CLI_CHECKSUM} ${PACKAGE_FILENAME}/g;" dist/*-checksums.txt
92+
93+
- name: Upload artifacts
94+
uses: actions/upload-artifact@v2
95+
with:
96+
name: dist
97+
path: dist
98+
99+
publish-nightly:
100+
runs-on: ubuntu-latest
101+
needs: notarize-macos
102+
103+
steps:
104+
- name: Download artifact
105+
uses: actions/download-artifact@v2
106+
with:
107+
name: dist
108+
# to ensure compatibility with v1
109+
path: dist
110+
111+
- name: Upload release files on Arduino downloads servers
112+
uses: docker://plugins/s3
113+
env:
114+
PLUGIN_SOURCE: "dist/*"
115+
PLUGIN_TARGET: "/arduino-cli/nightly"
116+
PLUGIN_STRIP_PREFIX: "dist/"
117+
PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }}
118+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
119+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
120+
121+
- name: Report failure
122+
if: failure()
123+
uses: masci/datadog@v1
124+
with:
125+
api-key: ${{ secrets.DD_API_KEY }}
126+
events: |
127+
- title: "Arduino CLI nightly build failed"
128+
text: "Nightly build workflow has failed"
129+
alert_type: "error"
130+
host: ${{ github.repository }}
131+
tags:
132+
- "project:arduino-cli"
133+
- "workflow:${{ github.workflow }}"

0 commit comments

Comments
 (0)