Skip to content

Commit bfffe92

Browse files
umbynosper1234
andauthored
Add release workflow and complementary files (#1)
* Update README.md * add license, the same used in imgtool repo * add patches, apply them on top of 1.8.0 0009 is used to patch cryptography version used because of: healthchecks/healthchecks#565 * [WIP] add first draft of release wf [TODO] remove hardcoded version and use ${GITHUB_REF/refs\/tags\//} add bash as default shell to find zip on win use 7zip on win to archive, zip is not installed by default remove ${{ github.workspace }} from win, it does not get expanded correctly * fix mac archive being corrupted tar in macos is not working correctly on the ghactions hosted runners actions/runner-images#2619 * add build using qemu and crosscompile with docker containers * fix path of volume binding, without the absolute path the volume is empty * fix permission problem: dist dir is created in the container with different user/grp * try to fix armv6 and v7 * install all qemu platforms, the build time does not increase * use version 4.2 of pyinstaller [it has the bootloader 🎉 for Linux-32-arm] pyinstaller/pyinstaller#6532 (comment) * use arm32v5 instead of arm32v6 as target arch. Debian is not available for armv6. arm32v6 arch should be able to run arm32v5 binaries * test for pyinstaller guys * bring back runner version because of glibc too recent * try to run file produced by pyinstaller * fix imgtool not starting. imgtool has to be run from `scripts/` folder and not from `imgtool/` one. Otherwise it will pick up the wrong main.py * use `env.PROJECT_NAME` * finalize CI: add correct trigger, create-release step, step names & cleanup * Apply suggestions from code review Co-authored-by: per1234 <[email protected]> * better organize the print output Co-authored-by: per1234 <[email protected]> * use env vars to factor out path strings Co-authored-by: per1234 <[email protected]>
1 parent 25a36f4 commit bfffe92

13 files changed

+985
-0
lines changed

.github/workflows/release.yml

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
name: Release
2+
3+
env:
4+
# The name of the project
5+
PROJECT_NAME: imgtool
6+
DIST_DIR: dist
7+
ARTIFACT_NAME: dist
8+
# The project's folder on Arduino's download server for uploading builds
9+
AWS_PLUGIN_TARGET: /tools/
10+
# See: https://github.com/actions/setup-python/tree/v2#available-versions-of-python
11+
PYTHON_VERSION: "3.7"
12+
MCUBOOT_PATH: ${{ github.workspace }}/mcuboot
13+
IMGTOOL_PACKING_PATH: ${{ github.workspace }}/imgtool-packing
14+
15+
16+
on:
17+
push:
18+
tags:
19+
- "[0-9]+.[0-9]+.[0-9]+*"
20+
21+
jobs:
22+
build:
23+
name: build (${{ matrix.package_platform }})
24+
strategy:
25+
matrix:
26+
os: [windows-latest, ubuntu-18.04, macos-10.15]
27+
python_arch: [x64]
28+
include:
29+
- os: windows-latest
30+
package_platform: Windows_32bit
31+
python_arch: x86
32+
- os: windows-latest
33+
package_platform: Windows_64bit
34+
- os: ubuntu-18.04
35+
package_platform: Linux_64bit
36+
archive_util: tar
37+
- os: macos-10.15
38+
package_platform: macOS_64bit
39+
archive_util: gtar # https://github.com/actions/virtual-environments/issues/2619
40+
defaults:
41+
run:
42+
shell: bash
43+
44+
runs-on: ${{ matrix.os }}
45+
46+
steps:
47+
- name: Checkout mcuboot repository
48+
uses: actions/checkout@v2
49+
with:
50+
repository: mcu-tools/mcuboot
51+
path: ${{ env.MCUBOOT_PATH }}
52+
ref: v1.8.0 # the patches apply only to this version
53+
54+
- name: Checkout imgtool-packing repository
55+
uses: actions/checkout@v2
56+
with:
57+
path: ${{ env.IMGTOOL_PACKING_PATH }}
58+
59+
- name: Apply patches
60+
working-directory: ${{ env.MCUBOOT_PATH }}/scripts/
61+
run: git apply -v "${{ env.IMGTOOL_PACKING_PATH }}/patches/"*
62+
63+
- name: Set up Python ${{ env.PYTHON_VERSION }}
64+
uses: actions/setup-python@v2
65+
with:
66+
python-version: ${{ env.PYTHON_VERSION }}
67+
architecture: ${{ matrix.python_arch }}
68+
69+
- name: Upgrade PIP
70+
run: python -m pip install --upgrade pip setuptools wheel
71+
72+
- name: Install python dependencies
73+
working-directory: ${{ env.MCUBOOT_PATH }}/scripts/
74+
run: pip install -r requirements.txt
75+
76+
- name: Install pyinstaller
77+
run: pip install pyinstaller
78+
79+
- name: Build
80+
working-directory: ${{ env.MCUBOOT_PATH }}/scripts/
81+
run: pyinstaller --onefile main.py -n ${{ env.PROJECT_NAME }}
82+
83+
- name: Package
84+
if: matrix.os == 'windows-latest'
85+
86+
working-directory: ${{ env.MCUBOOT_PATH }}/scripts/${{ env.DIST_DIR }}
87+
run: 7z a ${{ env.PROJECT_NAME }}_${GITHUB_REF/refs\/tags\//}_${{ matrix.package_platform }}.zip ${{ env.PROJECT_NAME }}.exe "${{ env.IMGTOOL_PACKING_PATH }}/LICENSE.txt"
88+
89+
- name: Package
90+
if: matrix.os != 'windows-latest'
91+
working-directory: ${{ env.MCUBOOT_PATH }}/scripts/${{ env.DIST_DIR }}
92+
run: ${{ matrix.archive_util }} -cz -C ./ ${{ env.PROJECT_NAME }} -C ${{ env.IMGTOOL_PACKING_PATH }} LICENSE.txt -f ${{ env.PROJECT_NAME }}_${GITHUB_REF/refs\/tags\//}_${{ matrix.package_platform }}.tar.gz
93+
94+
- name: Upload artifacts
95+
uses: actions/upload-artifact@v2
96+
with:
97+
if-no-files-found: error
98+
name: ${{ env.ARTIFACT_NAME }}
99+
path: ${{ env.MCUBOOT_PATH }}/scripts/dist/${{ env.PROJECT_NAME }}_*
100+
101+
build-crosscompile:
102+
name: build (${{ matrix.package_platform }})
103+
strategy:
104+
matrix:
105+
package_platform: [Linux_32bit, Linux_ARMv6, Linux_ARMv7, Linux_ARM64]
106+
include:
107+
- package_platform: Linux_32bit
108+
docker_image: i386/python:3.7-buster
109+
- package_platform: Linux_ARMv6
110+
docker_image: arm32v5/python:3.7-buster # buster is not available for arm32v6, but should be backward compatible
111+
- package_platform: Linux_ARMv7
112+
docker_image: arm32v7/python:3.7-buster
113+
- package_platform: Linux_ARM64
114+
docker_image: arm64v8/python:3.7-buster
115+
116+
runs-on: ubuntu-latest
117+
steps:
118+
- name: Checkout mcuboot repository
119+
uses: actions/checkout@v2
120+
with:
121+
repository: mcu-tools/mcuboot
122+
path: ${{ env.MCUBOOT_PATH }}
123+
ref: v1.8.0 # the patches apply only to this version
124+
125+
- name: Checkout imgtool-packing repository
126+
uses: actions/checkout@v2
127+
with:
128+
path: ${{ env.IMGTOOL_PACKING_PATH }}
129+
130+
- name: Apply patches
131+
working-directory: ${{ env.MCUBOOT_PATH }}/scripts/
132+
run: git apply -v "${{ env.IMGTOOL_PACKING_PATH }}/patches/"*
133+
134+
- name: Set up QEMU
135+
uses: docker/setup-qemu-action@v1
136+
with:
137+
image: tonistiigi/binfmt:latest
138+
platforms: all
139+
140+
- name: Copy build script
141+
working-directory: ${{ env.IMGTOOL_PACKING_PATH }}
142+
run: cp build.sh ${{ env.MCUBOOT_PATH }}/scripts/imgtool/
143+
144+
# Docker containers used to crosscompile:
145+
# https://github.com/docker-library/official-images#architectures-other-than-amd64
146+
- name: Build
147+
working-directory: ${{ env.MCUBOOT_PATH }}/scripts
148+
run: docker run -v "$(pwd)":/workspace ${{ matrix.docker_image }} ./workspace/imgtool/build.sh
149+
150+
- name: Smoke test build
151+
working-directory: ${{ env.MCUBOOT_PATH }}/scripts
152+
run: docker run -v "$(pwd)":/workspace ${{ matrix.docker_image }} ./workspace/dist/imgtool
153+
154+
- name: Package
155+
working-directory: ${{ env.MCUBOOT_PATH }}/scripts/${{ env.DIST_DIR }}
156+
run: sudo tar -cz -C ./ ${{ env.PROJECT_NAME }} -C ${{ env.IMGTOOL_PACKING_PATH }} LICENSE.txt -f ${{ env.PROJECT_NAME }}_${GITHUB_REF/refs\/tags\//}_${{ matrix.package_platform }}.tar.gz #dist dir is created in the container with different user/grp
157+
158+
- name: Upload artifacts
159+
uses: actions/upload-artifact@v2
160+
with:
161+
if-no-files-found: error
162+
name: ${{ env.ARTIFACT_NAME }}
163+
path: ${{ env.MCUBOOT_PATH }}/scripts/dist/${{ env.PROJECT_NAME }}_*
164+
165+
create-release:
166+
runs-on: ubuntu-latest
167+
needs: [build, build-crosscompile]
168+
169+
steps:
170+
- name: Download artifact
171+
uses: actions/download-artifact@v2
172+
with:
173+
name: ${{ env.ARTIFACT_NAME }}
174+
path: ${{ env.DIST_DIR }}
175+
176+
- name: Create Github Release and upload artifacts
177+
uses: ncipollo/release-action@v1
178+
with:
179+
token: ${{ secrets.GITHUB_TOKEN }}
180+
draft: false
181+
artifacts: ${{ env.DIST_DIR }}/*
182+
183+
- name: Upload release files on Arduino downloads servers
184+
uses: docker://plugins/s3
185+
env:
186+
PLUGIN_SOURCE: "${{ env.DIST_DIR }}/*"
187+
PLUGIN_TARGET: ${{ env.AWS_PLUGIN_TARGET }}
188+
PLUGIN_STRIP_PREFIX: "${{ env.DIST_DIR }}/"
189+
PLUGIN_BUCKET: ${{ secrets.DOWNLOADS_BUCKET }}
190+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
191+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

LICENSE.txt

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
Apache License
2+
Version 2.0, January 2004
3+
http://www.apache.org/licenses/
4+
5+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6+
7+
1. Definitions.
8+
9+
"License" shall mean the terms and conditions for use, reproduction,
10+
and distribution as defined by Sections 1 through 9 of this document.
11+
12+
"Licensor" shall mean the copyright owner or entity authorized by
13+
the copyright owner that is granting the License.
14+
15+
"Legal Entity" shall mean the union of the acting entity and all
16+
other entities that control, are controlled by, or are under common
17+
control with that entity. For the purposes of this definition,
18+
"control" means (i) the power, direct or indirect, to cause the
19+
direction or management of such entity, whether by contract or
20+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
21+
outstanding shares, or (iii) beneficial ownership of such entity.
22+
23+
"You" (or "Your") shall mean an individual or Legal Entity
24+
exercising permissions granted by this License.
25+
26+
"Source" form shall mean the preferred form for making modifications,
27+
including but not limited to software source code, documentation
28+
source, and configuration files.
29+
30+
"Object" form shall mean any form resulting from mechanical
31+
transformation or translation of a Source form, including but
32+
not limited to compiled object code, generated documentation,
33+
and conversions to other media types.
34+
35+
"Work" shall mean the work of authorship, whether in Source or
36+
Object form, made available under the License, as indicated by a
37+
copyright notice that is included in or attached to the work
38+
(an example is provided in the Appendix below).
39+
40+
"Derivative Works" shall mean any work, whether in Source or Object
41+
form, that is based on (or derived from) the Work and for which the
42+
editorial revisions, annotations, elaborations, or other modifications
43+
represent, as a whole, an original work of authorship. For the purposes
44+
of this License, Derivative Works shall not include works that remain
45+
separable from, or merely link (or bind by name) to the interfaces of,
46+
the Work and Derivative Works thereof.
47+
48+
"Contribution" shall mean any work of authorship, including
49+
the original version of the Work and any modifications or additions
50+
to that Work or Derivative Works thereof, that is intentionally
51+
submitted to Licensor for inclusion in the Work by the copyright owner
52+
or by an individual or Legal Entity authorized to submit on behalf of
53+
the copyright owner. For the purposes of this definition, "submitted"
54+
means any form of electronic, verbal, or written communication sent
55+
to the Licensor or its representatives, including but not limited to
56+
communication on electronic mailing lists, source code control systems,
57+
and issue tracking systems that are managed by, or on behalf of, the
58+
Licensor for the purpose of discussing and improving the Work, but
59+
excluding communication that is conspicuously marked or otherwise
60+
designated in writing by the copyright owner as "Not a Contribution."
61+
62+
"Contributor" shall mean Licensor and any individual or Legal Entity
63+
on behalf of whom a Contribution has been received by Licensor and
64+
subsequently incorporated within the Work.
65+
66+
2. Grant of Copyright License. Subject to the terms and conditions of
67+
this License, each Contributor hereby grants to You a perpetual,
68+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69+
copyright license to reproduce, prepare Derivative Works of,
70+
publicly display, publicly perform, sublicense, and distribute the
71+
Work and such Derivative Works in Source or Object form.
72+
73+
3. Grant of Patent License. Subject to the terms and conditions of
74+
this License, each Contributor hereby grants to You a perpetual,
75+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76+
(except as stated in this section) patent license to make, have made,
77+
use, offer to sell, sell, import, and otherwise transfer the Work,
78+
where such license applies only to those patent claims licensable
79+
by such Contributor that are necessarily infringed by their
80+
Contribution(s) alone or by combination of their Contribution(s)
81+
with the Work to which such Contribution(s) was submitted. If You
82+
institute patent litigation against any entity (including a
83+
cross-claim or counterclaim in a lawsuit) alleging that the Work
84+
or a Contribution incorporated within the Work constitutes direct
85+
or contributory patent infringement, then any patent licenses
86+
granted to You under this License for that Work shall terminate
87+
as of the date such litigation is filed.
88+
89+
4. Redistribution. You may reproduce and distribute copies of the
90+
Work or Derivative Works thereof in any medium, with or without
91+
modifications, and in Source or Object form, provided that You
92+
meet the following conditions:
93+
94+
(a) You must give any other recipients of the Work or
95+
Derivative Works a copy of this License; and
96+
97+
(b) You must cause any modified files to carry prominent notices
98+
stating that You changed the files; and
99+
100+
(c) You must retain, in the Source form of any Derivative Works
101+
that You distribute, all copyright, patent, trademark, and
102+
attribution notices from the Source form of the Work,
103+
excluding those notices that do not pertain to any part of
104+
the Derivative Works; and
105+
106+
(d) If the Work includes a "NOTICE" text file as part of its
107+
distribution, then any Derivative Works that You distribute must
108+
include a readable copy of the attribution notices contained
109+
within such NOTICE file, excluding those notices that do not
110+
pertain to any part of the Derivative Works, in at least one
111+
of the following places: within a NOTICE text file distributed
112+
as part of the Derivative Works; within the Source form or
113+
documentation, if provided along with the Derivative Works; or,
114+
within a display generated by the Derivative Works, if and
115+
wherever such third-party notices normally appear. The contents
116+
of the NOTICE file are for informational purposes only and
117+
do not modify the License. You may add Your own attribution
118+
notices within Derivative Works that You distribute, alongside
119+
or as an addendum to the NOTICE text from the Work, provided
120+
that such additional attribution notices cannot be construed
121+
as modifying the License.
122+
123+
You may add Your own copyright statement to Your modifications and
124+
may provide additional or different license terms and conditions
125+
for use, reproduction, or distribution of Your modifications, or
126+
for any such Derivative Works as a whole, provided Your use,
127+
reproduction, and distribution of the Work otherwise complies with
128+
the conditions stated in this License.
129+
130+
5. Submission of Contributions. Unless You explicitly state otherwise,
131+
any Contribution intentionally submitted for inclusion in the Work
132+
by You to the Licensor shall be under the terms and conditions of
133+
this License, without any additional terms or conditions.
134+
Notwithstanding the above, nothing herein shall supersede or modify
135+
the terms of any separate license agreement you may have executed
136+
with Licensor regarding such Contributions.
137+
138+
6. Trademarks. This License does not grant permission to use the trade
139+
names, trademarks, service marks, or product names of the Licensor,
140+
except as required for reasonable and customary use in describing the
141+
origin of the Work and reproducing the content of the NOTICE file.
142+
143+
7. Disclaimer of Warranty. Unless required by applicable law or
144+
agreed to in writing, Licensor provides the Work (and each
145+
Contributor provides its Contributions) on an "AS IS" BASIS,
146+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147+
implied, including, without limitation, any warranties or conditions
148+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149+
PARTICULAR PURPOSE. You are solely responsible for determining the
150+
appropriateness of using or redistributing the Work and assume any
151+
risks associated with Your exercise of permissions under this License.
152+
153+
8. Limitation of Liability. In no event and under no legal theory,
154+
whether in tort (including negligence), contract, or otherwise,
155+
unless required by applicable law (such as deliberate and grossly
156+
negligent acts) or agreed to in writing, shall any Contributor be
157+
liable to You for damages, including any direct, indirect, special,
158+
incidental, or consequential damages of any character arising as a
159+
result of this License or out of the use or inability to use the
160+
Work (including but not limited to damages for loss of goodwill,
161+
work stoppage, computer failure or malfunction, or any and all
162+
other commercial damages or losses), even if such Contributor
163+
has been advised of the possibility of such damages.
164+
165+
9. Accepting Warranty or Additional Liability. While redistributing
166+
the Work or Derivative Works thereof, You may choose to offer,
167+
and charge a fee for, acceptance of support, warranty, indemnity,
168+
or other liability obligations and/or rights consistent with this
169+
License. However, in accepting such obligations, You may act only
170+
on Your own behalf and on Your sole responsibility, not on behalf
171+
of any other Contributor, and only if You agree to indemnify,
172+
defend, and hold each Contributor harmless for any liability
173+
incurred by, or claims asserted against, such Contributor by reason
174+
of your accepting any such warranty or additional liability.
175+
176+
END OF TERMS AND CONDITIONS
177+
178+
APPENDIX: How to apply the Apache License to your work.
179+
180+
To apply the Apache License to your work, attach the following
181+
boilerplate notice, with the fields enclosed by brackets "{}"
182+
replaced with your own identifying information. (Don't include
183+
the brackets!) The text should be enclosed in the appropriate
184+
comment syntax for the file format. We also recommend that a
185+
file or class name and description of purpose be included on the
186+
same "printed page" as the copyright notice for easier
187+
identification within third-party archives.
188+
189+
Copyright {yyyy} {name of copyright owner}
190+
191+
Licensed under the Apache License, Version 2.0 (the "License");
192+
you may not use this file except in compliance with the License.
193+
You may obtain a copy of the License at
194+
195+
http://www.apache.org/licenses/LICENSE-2.0
196+
197+
Unless required by applicable law or agreed to in writing, software
198+
distributed under the License is distributed on an "AS IS" BASIS,
199+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200+
See the License for the specific language governing permissions and
201+
limitations under the License.
202+
203+
This product bundles tinycrypt, which is available under the "3-clause BSD"
204+
license. For details, and bundled files see:
205+
* ext/tinycrypt/LICENSE
206+
* ext/tinycrypt

0 commit comments

Comments
 (0)