Skip to content

Commit fa820ac

Browse files
silvanocerzaper1234
authored andcommitted
[skip changelog] Update release process to ditch goreleaser
1 parent 2573f87 commit fa820ac

File tree

4 files changed

+363
-0
lines changed

4 files changed

+363
-0
lines changed

.github/workflows/release.yml

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

.gitignore

Lines changed: 2 additions & 0 deletions
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

DistTasks.yml

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
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 -it -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 }} ../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 }} {{ .LDFLAGS }}"
33+
BUILD_PLATFORM: "windows/386"
34+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
35+
PACKAGE_PLATFORM: "Windows_32bit"
36+
PACKAGE_NAME: "{{ .PROJECT_NAME }}-{{ .VERSION }}-{{ .TIMESTAMP_SHORT }}_{{ .PACKAGE_PLATFORM }}.zip"
37+
38+
Windows_64bit:
39+
desc: Builds Windows 64 bit binaries
40+
dir: "{{ .DIST_DIR }}"
41+
cmds:
42+
- |
43+
docker run -it -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 }} ../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 }} {{ .LDFLAGS }}"
55+
BUILD_PLATFORM: "windows/amd64"
56+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
57+
PACKAGE_PLATFORM: "Windows_64bit"
58+
PACKAGE_NAME: "{{ .PROJECT_NAME }}-{{ .VERSION }}-{{ .TIMESTAMP_SHORT }}_{{ .PACKAGE_PLATFORM }}.zip"
59+
60+
Linux_32bit:
61+
desc: Builds Linux 32 bit binaries
62+
dir: "{{ .DIST_DIR }}"
63+
cmds:
64+
- |
65+
docker run -it -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 }} {{ .LDFLAGS }}"
77+
BUILD_PLATFORM: "linux/386"
78+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
79+
PACKAGE_PLATFORM: "Linux_32bit"
80+
PACKAGE_NAME: "{{ .PROJECT_NAME }}-{{ .VERSION }}-{{ .TIMESTAMP_SHORT }}_{{ .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 -it -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 }} {{ .LDFLAGS }}"
99+
BUILD_PLATFORM: "linux/amd64"
100+
CONTAINER_TAG: "{{ .GO_VERSION }}-main"
101+
PACKAGE_PLATFORM: "Linux_64bit"
102+
PACKAGE_NAME: "{{ .PROJECT_NAME }}-{{ .VERSION }}-{{ .TIMESTAMP_SHORT }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
103+
104+
Linux_ARMv7:
105+
desc: Builds Linux ARMv7 binaries
106+
dir: "{{ .DIST_DIR }}"
107+
cmds:
108+
- |
109+
docker run -it -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 }} {{ .LDFLAGS }}"
121+
BUILD_PLATFORM: "linux/armv7"
122+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
123+
PACKAGE_PLATFORM: "Linux_ARMv7"
124+
PACKAGE_NAME: "{{ .PROJECT_NAME }}-{{ .VERSION }}-{{ .TIMESTAMP_SHORT }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
125+
126+
Linux_ARMv6:
127+
desc: Builds Linux ARMv6 binaries
128+
dir: "{{ .DIST_DIR }}"
129+
cmds:
130+
- |
131+
docker run -it -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 }} {{ .LDFLAGS }}"
143+
BUILD_PLATFORM: "linux/armv6"
144+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
145+
PACKAGE_PLATFORM: "Linux_ARMv6"
146+
PACKAGE_NAME: "{{ .PROJECT_NAME }}-{{ .VERSION }}-{{ .TIMESTAMP_SHORT }}_{{ .PACKAGE_PLATFORM }}.tar.gz"
147+
148+
Linux_ARM64:
149+
desc: Builds Linux ARM64 binaries
150+
dir: "{{ .DIST_DIR }}"
151+
cmds:
152+
- |
153+
docker run -it -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 }} {{ .LDFLAGS }}"
165+
BUILD_PLATFORM: "linux/arm64"
166+
CONTAINER_TAG: "{{ .GO_VERSION }}-arm"
167+
PACKAGE_PLATFORM: "Linux_ARM64"
168+
PACKAGE_NAME: "{{ .PROJECT_NAME }}-{{ .VERSION }}-{{ .TIMESTAMP_SHORT }}_{{ .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 -it -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 }} {{ .LDFLAGS }}"
187+
BUILD_PLATFORM: "darwin/amd64"
188+
CONTAINER_TAG: "{{ .GO_VERSION }}-darwin"
189+
PACKAGE_PLATFORM: "macOS_64bit"
190+
PACKAGE_NAME: "{{ .PROJECT_NAME }}-{{ .VERSION }}-{{ .TIMESTAMP_SHORT }}_{{ .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+
CONTAINER: "docker.elastic.co/beats-dev/golang-crossbuild"
198+
GO_VERSION: "1.14.7"
199+
CHECKSUM_FILE: "{{ .VERSION }}-{{ .TIMESTAMP_SHORT }}-checksums.txt"

Taskfile.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
version: "3"
22

3+
includes:
4+
dist: ./DistTasks.yml
5+
36
tasks:
47
build:
58
desc: Build the project
@@ -264,6 +267,8 @@ tasks:
264267
- poetry run codespell --write-changes {{ .CODESPELL_SKIP_OPTION }} {{ .CODESPELL_IGNORE_WORDS_OPTION }}
265268

266269
vars:
270+
PROJECT_NAME: "arduino-lint"
271+
DIST_DIR: "dist"
267272
DEFAULT_PACKAGES:
268273
sh: echo `go list ./... | tr '\n' ' '`
269274
DEFAULT_PATHS:

0 commit comments

Comments
 (0)