Skip to content

Commit a58dfe9

Browse files
authored
Merge pull request #120 from arduino/scerza/new-release-process
[skip changelog] New release process that doesn't use goreleaser
2 parents 2573f87 + d19e1ea commit a58dfe9

File tree

9 files changed

+423
-10
lines changed

9 files changed

+423
-10
lines changed

Diff for: .github/workflows/release.yml

+163
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
name: release
2+
3+
on:
4+
push:
5+
tags:
6+
- "[0-9]+.[0-9]+.[0-9]+*"
7+
8+
jobs:
9+
create-release-artifacts:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Checkout
14+
uses: actions/checkout@v1
15+
with:
16+
fetch-depth: 0
17+
18+
- name: Create changelog
19+
uses: arduino/[email protected]
20+
with:
21+
tag-regex: '^[0-9]+\.[0-9]+\.[0-9]+$'
22+
filter-regex: '^\[([sS][kK][iI][pP]|[cC][hH][aA][nN][gG][eE][lL][oO][gG])[ ,-]([cC][hH][aA][nN][gG][eE][lL][oO][gG]|[sS][kK][iI][pP])\].*'
23+
changelog-file-path: "dist/CHANGELOG.md"
24+
25+
- name: Install Taskfile
26+
uses: arduino/actions/setup-taskfile@master
27+
with:
28+
repo-token: ${{ secrets.GITHUB_TOKEN }}
29+
version: 3.x
30+
31+
- name: Build
32+
run: task dist:all
33+
34+
- name: Upload artifacts
35+
uses: actions/upload-artifact@v2
36+
with:
37+
name: dist
38+
path: dist
39+
40+
notarize-macos:
41+
runs-on: macos-latest
42+
needs: create-release-artifacts
43+
44+
steps:
45+
- name: Checkout
46+
uses: actions/checkout@v2
47+
48+
- name: Download artifacts
49+
uses: actions/download-artifact@v2
50+
with:
51+
name: dist
52+
# to ensure compatibility with v1
53+
path: dist
54+
55+
- name: Import Code-Signing Certificates
56+
env:
57+
KEYCHAIN: "sign.keychain"
58+
INSTALLER_CERT_MAC_PATH: "/tmp/ArduinoCerts2020.p12"
59+
KEYCHAIN_PASSWORD: keychainpassword # Arbitrary password for a keychain that exists only for the duration of the job, so not secret
60+
run: |
61+
echo "${{ secrets.INSTALLER_CERT_MAC_P12 }}" | base64 --decode > ${{ env.INSTALLER_CERT_MAC_PATH }}
62+
security create-keychain -p ${{ env.KEYCHAIN_PASSWORD }} ${{ env.KEYCHAIN }}
63+
security default-keychain -s ${{ env.KEYCHAIN }}
64+
security unlock-keychain -p ${{ env.KEYCHAIN_PASSWORD }} ${{ env.KEYCHAIN }}
65+
security import ${{ env.INSTALLER_CERT_MAC_PATH }} -k ${{ env.KEYCHAIN }} -f pkcs12 -A -T /usr/bin/codesign -P ${{ secrets.INSTALLER_CERT_MAC_PASSWORD }}
66+
security set-key-partition-list -S apple-tool:,apple: -s -k ${{ env.KEYCHAIN_PASSWORD }} ${{ env.KEYCHAIN }}
67+
68+
- name: Install gon for code signing and app notarization
69+
run: |
70+
wget -q https://github.com/mitchellh/gon/releases/download/v0.2.3/gon_macos.zip
71+
unzip gon_macos.zip -d /usr/local/bin
72+
73+
- name: Sign and notarize binary
74+
env:
75+
AC_USERNAME: ${{ secrets.AC_USERNAME }}
76+
AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
77+
run: |
78+
gon gon.config.hcl
79+
80+
- name: Re-package binary and update checksum
81+
# This step performs the following:
82+
# 1. Repackage the signed binary replaced in place by Gon (ignoring the output zip file)
83+
# 2. Recalculate package checksum and replace it in the goreleaser nnnnnn-checksums.txt file
84+
run: |
85+
# GitHub's upload/download-artifact@v2 action doesn't preserve file permissions,
86+
# so we need to add execution permission back until the action is made to do this.
87+
chmod +x dist/arduino-lint_osx_darwin_amd64/arduino-lint
88+
TAG=${GITHUB_REF/refs\/tags\//}
89+
tar -czvf dist/arduino-lint_${TAG}_macOS_64bit.tar.gz \
90+
-C dist/arduino-lint_osx_darwin_amd64/ arduino-lint \
91+
-C ../../ LICENSE.txt
92+
LINT_CHECKSUM=$(shasum -a 256 dist/arduino-lint_${TAG}_macOS_64bit.tar.gz | cut -d " " -f 1)
93+
perl -pi -w -e "s/.*arduino-lint_${TAG}_macOS_64bit.tar.gz/${LINT_CHECKSUM} arduino-lint_${TAG}_macOS_64bit.tar.gz/g;" dist/*-checksums.txt
94+
95+
- name: Upload artifacts
96+
uses: actions/upload-artifact@v2
97+
with:
98+
name: dist
99+
path: dist
100+
101+
create-release:
102+
runs-on: ubuntu-latest
103+
needs: notarize-macos
104+
105+
steps:
106+
- name: Checkout
107+
uses: actions/checkout@v2
108+
109+
- name: Download artifact
110+
uses: actions/download-artifact@v2
111+
with:
112+
name: dist
113+
# to ensure compatibility with v1
114+
path: dist
115+
116+
- name: Read CHANGELOG
117+
id: changelog
118+
run: |
119+
body=$(cat dist/CHANGELOG.md)
120+
body="${body//'%'/'%25'}"
121+
body="${body//$'\n'/'%0A'}"
122+
body="${body//$'\r'/'%0D'}"
123+
echo $body
124+
echo "::set-output name=BODY::$body"
125+
126+
- name: Identify Prerelease
127+
# This is a workaround while waiting for create-release action
128+
# to implement auto pre-release based on tag
129+
id: prerelease
130+
run: |
131+
wget -q -P /tmp https://github.com/fsaintjacques/semver-tool/archive/3.0.0.zip
132+
unzip -p /tmp/3.0.0.zip semver-tool-3.0.0/src/semver >/tmp/semver && chmod +x /tmp/semver
133+
if [[ $(/tmp/semver get prerel ${GITHUB_REF/refs\/tags\//}) ]]; then echo "::set-output name=IS_PRE::true"; fi
134+
135+
- name: Create Github Release
136+
id: create_release
137+
uses: actions/create-release@v1
138+
env:
139+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
140+
with:
141+
tag_name: ${{ github.ref }}
142+
release_name: ${{ github.ref }}
143+
body: ${{ steps.changelog.outputs.BODY }}
144+
draft: false
145+
prerelease: ${{ steps.prerelease.outputs.IS_PRE }}
146+
147+
- name: Upload release files on Github
148+
uses: svenstaro/upload-release-action@v2
149+
with:
150+
repo_token: ${{ secrets.GITHUB_TOKEN }}
151+
file: dist/*
152+
tag: ${{ github.ref }}
153+
file_glob: true
154+
155+
- name: Upload release files on Arduino downloads servers
156+
uses: docker://plugins/s3
157+
env:
158+
PLUGIN_SOURCE: "dist/*"
159+
PLUGIN_TARGET: "/arduino-lint/"
160+
PLUGIN_STRIP_PREFIX: "dist/"
161+
PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }}
162+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
163+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

Diff for: .gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,5 @@ coverage_unit.txt
1818
/docsgen/arduino-cli
1919
/docsgen/arduino-cli.exe
2020
/docs/commands/*.md
21+
22+
/dist

Diff for: DistTasks.yml

+206
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
version: "3"
2+
3+
tasks:
4+
all:
5+
desc: Build for distribution for all platforms
6+
cmds:
7+
- task: Windows_32bit
8+
- task: Windows_64bit
9+
- task: Linux_32bit
10+
- task: Linux_64bit
11+
- task: Linux_ARMv6
12+
- task: Linux_ARMv7
13+
- task: Linux_ARM64
14+
- task: macOS_64bit
15+
16+
Windows_32bit:
17+
desc: Builds Windows 32 bit binaries
18+
dir: "{{ .DIST_DIR }}"
19+
cmds:
20+
- |
21+
docker run -v `pwd`/..:/home/lint -w /home/lint \
22+
-e CGO_ENABLED=1 \
23+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
24+
--build-cmd "{{ .BUILD_COMMAND }}" \
25+
-p "{{ .BUILD_PLATFORM }}"
26+
27+
zip {{ .PACKAGE_NAME}} {{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe ../LICENSE.txt -j
28+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
29+
30+
vars:
31+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_windows_386"
32+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .DIST_LDFLAGS }}"
33+
BUILD_PLATFORM: "windows/386"
34+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
35+
PACKAGE_PLATFORM: "Windows_32bit"
36+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"
37+
38+
Windows_64bit:
39+
desc: Builds Windows 64 bit binaries
40+
dir: "{{ .DIST_DIR }}"
41+
cmds:
42+
- |
43+
docker run -v `pwd`/..:/home/lint -w /home/lint \
44+
-e CGO_ENABLED=1 \
45+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
46+
--build-cmd "{{ .BUILD_COMMAND }}" \
47+
-p "{{ .BUILD_PLATFORM }}"
48+
49+
zip {{ .PACKAGE_NAME}} {{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe ../LICENSE.txt -j
50+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
51+
52+
vars:
53+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_windows_amd64"
54+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }}.exe {{ .DIST_LDFLAGS }}"
55+
BUILD_PLATFORM: "windows/amd64"
56+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
57+
PACKAGE_PLATFORM: "Windows_64bit"
58+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.zip"
59+
60+
Linux_32bit:
61+
desc: Builds Linux 32 bit binaries
62+
dir: "{{ .DIST_DIR }}"
63+
cmds:
64+
- |
65+
docker run -v `pwd`/..:/home/lint -w /home/lint \
66+
-e CGO_ENABLED=1 \
67+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
68+
--build-cmd "{{ .BUILD_COMMAND }}" \
69+
-p "{{ .BUILD_PLATFORM }}"
70+
71+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
72+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
73+
74+
vars:
75+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_amd32"
76+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
77+
BUILD_PLATFORM: "linux/386"
78+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
79+
PACKAGE_PLATFORM: "Linux_32bit"
80+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
81+
82+
Linux_64bit:
83+
desc: Builds Linux 64 bit binaries
84+
dir: "{{ .DIST_DIR }}"
85+
cmds:
86+
- |
87+
docker run -v `pwd`/..:/home/lint -w /home/lint \
88+
-e CGO_ENABLED=1 \
89+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
90+
--build-cmd "{{ .BUILD_COMMAND }}" \
91+
-p "{{ .BUILD_PLATFORM }}"
92+
93+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
94+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
95+
96+
vars:
97+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_amd64"
98+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
99+
BUILD_PLATFORM: "linux/amd64"
100+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
101+
PACKAGE_PLATFORM: "Linux_64bit"
102+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
103+
104+
Linux_ARMv7:
105+
desc: Builds Linux ARMv7 binaries
106+
dir: "{{ .DIST_DIR }}"
107+
cmds:
108+
- |
109+
docker run -v `pwd`/..:/home/lint -w /home/lint \
110+
-e CGO_ENABLED=1 \
111+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
112+
--build-cmd "{{ .BUILD_COMMAND }}" \
113+
-p "{{ .BUILD_PLATFORM }}"
114+
115+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
116+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
117+
118+
vars:
119+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_7"
120+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
121+
BUILD_PLATFORM: "linux/armv7"
122+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
123+
PACKAGE_PLATFORM: "Linux_ARMv7"
124+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
125+
126+
Linux_ARMv6:
127+
desc: Builds Linux ARMv6 binaries
128+
dir: "{{ .DIST_DIR }}"
129+
cmds:
130+
- |
131+
docker run -v `pwd`/..:/home/lint -w /home/lint \
132+
-e CGO_ENABLED=1 \
133+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
134+
--build-cmd "{{ .BUILD_COMMAND }}" \
135+
-p "{{ .BUILD_PLATFORM }}"
136+
137+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
138+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
139+
140+
vars:
141+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
142+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
143+
BUILD_PLATFORM: "linux/armv6"
144+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
145+
PACKAGE_PLATFORM: "Linux_ARMv6"
146+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
147+
148+
Linux_ARM64:
149+
desc: Builds Linux ARM64 binaries
150+
dir: "{{ .DIST_DIR }}"
151+
cmds:
152+
- |
153+
docker run -v `pwd`/..:/home/lint -w /home/lint \
154+
-e CGO_ENABLED=1 \
155+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
156+
--build-cmd "{{ .BUILD_COMMAND }}" \
157+
-p "{{ .BUILD_PLATFORM }}"
158+
159+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
160+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
161+
162+
vars:
163+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_linux_arm_6"
164+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
165+
BUILD_PLATFORM: "linux/arm64"
166+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
167+
PACKAGE_PLATFORM: "Linux_ARM64"
168+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
169+
170+
macOS_64bit:
171+
desc: Builds Mac OS X 64 bit binaries
172+
dir: "{{ .DIST_DIR }}"
173+
cmds:
174+
- |
175+
docker run -v `pwd`/..:/home/lint -w /home/lint \
176+
-e CGO_ENABLED=1 \
177+
{{ .CONTAINER }}:{{ .CONTAINER_TAG }} \
178+
--build-cmd "{{ .BUILD_COMMAND }}" \
179+
-p "{{ .BUILD_PLATFORM }}"
180+
181+
tar cz -C {{ .PLATFORM_DIR }} {{ .PROJECT_NAME }} -C ../.. LICENSE.txt -f {{ .PACKAGE_NAME }}
182+
sha256sum {{ .PACKAGE_NAME }} >> {{ .CHECKSUM_FILE }}
183+
184+
vars:
185+
PLATFORM_DIR: "{{ .PROJECT_NAME }}_osx_darwin_amd64"
186+
BUILD_COMMAND: "go build -o {{ .DIST_DIR }}/{{ .PLATFORM_DIR }}/{{ .PROJECT_NAME }} {{ .DIST_LDFLAGS }}"
187+
BUILD_PLATFORM: "darwin/amd64"
188+
CONTAINER_TAG: "{{ .GO_VERSION }}-darwin"
189+
PACKAGE_PLATFORM: "macOS_64bit"
190+
PACKAGE_NAME: "{{ .PROJECT_NAME }}_{{ .VERSION }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
191+
192+
vars:
193+
VERSION:
194+
sh: echo "`git describe --tags --abbrev=0`"
195+
TIMESTAMP_SHORT:
196+
sh: echo "{{now | date "20060102"}}"
197+
DIST_LDFLAGS: >-
198+
-ldflags
199+
'
200+
-X {{ .CONFIGURATION_PACKAGE }}.version={{.VERSION}}
201+
-X {{ .CONFIGURATION_PACKAGE }}.commit={{.COMMIT}}
202+
-X {{ .CONFIGURATION_PACKAGE }}.buildTimestamp={{.TIMESTAMP}}
203+
'
204+
CONTAINER: "docker.elastic.co/beats-dev/golang-crossbuild"
205+
GO_VERSION: "1.14.7"
206+
CHECKSUM_FILE: "{{ .VERSION }}-{{ .TIMESTAMP_SHORT }}-checksums.txt"

0 commit comments

Comments
 (0)