diff --git a/.github/workflows/githubci.yml b/.github/workflows/githubci.yml index 0994f57..a683845 100644 --- a/.github/workflows/githubci.yml +++ b/.github/workflows/githubci.yml @@ -23,7 +23,7 @@ jobs: - name: Install Toolchains run: | - pip3 install adafruit-nrfutil + pip3 install adafruit-nrfutil uritemplate requests wget https://www.nordicsemi.com/api/sitecore/Products/DownloadPlatform --post-data=fileid=8F19D314130548209E75EFFADD9348DB -O cli-tools.tar tar -xv -f cli-tools.tar echo "::add-path::$GITHUB_WORKSPACE/mergehex" @@ -34,6 +34,11 @@ jobs: - name: Build run: python3 tools/build_all.py - - name: Upload release + - name: Upload Release Asset if: github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested') - run: echo Upload... Bin files + working-directory: tools + env: + UPLOAD_URL: ${{ github.event.release.upload_url }} + ADABOT_GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: "[ -z \"$ADABOT_GITHUB_ACCESS_TOKEN\" ] || python3 -u upload_release_files.py" + diff --git a/.travis.yml b/.travis.yml.bck similarity index 100% rename from .travis.yml rename to .travis.yml.bck diff --git a/tools/github_requests.py b/tools/github_requests.py new file mode 100644 index 0000000..6b8e74c --- /dev/null +++ b/tools/github_requests.py @@ -0,0 +1,76 @@ +# The MIT License (MIT) +# +# Copyright (c) 2017 Scott Shawcroft for Adafruit Industries +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +""" +`adafruit_adabot` +==================================================== + +TODO(description) + +* Author(s): Scott Shawcroft +""" +import os + +import requests + + +def _fix_url(url): + if url.startswith("/"): + url = "https://api.github.com" + url + return url + +def _fix_kwargs(kwargs): + api_version = "application/vnd.github.scarlet-witch-preview+json;application/vnd.github.hellcat-preview+json" + if "headers" in kwargs: + if "Accept" in kwargs["headers"]: + kwargs["headers"]["Accept"] += ";" + api_version + else: + kwargs["headers"]["Accept"] = api_version + else: + kwargs["headers"] = {"Accept": "application/vnd.github.hellcat-preview+json"} + if "ADABOT_GITHUB_ACCESS_TOKEN" in os.environ and "auth" not in kwargs: + access_token = os.environ["ADABOT_GITHUB_ACCESS_TOKEN"] + if "params" in kwargs: + kwargs["params"]["access_token"] = access_token + else: + kwargs["params"] = {"access_token": access_token} + if "timeout" not in kwargs: + kwargs["timeout"] = 30 + return kwargs + +def get(url, **kwargs): + response = requests.get(_fix_url(url), **_fix_kwargs(kwargs)) + remaining = int(response.headers["X-RateLimit-Remaining"]) + if remaining % 100 == 0: + print(remaining, "requests remaining this hour") + return response + +def post(url, **kwargs): + return requests.post(_fix_url(url), **_fix_kwargs(kwargs)) + +def put(url, **kwargs): + return requests.put(_fix_url(url), **_fix_kwargs(kwargs)) + +def patch(url, **kwargs): + return requests.patch(_fix_url(url), **_fix_kwargs(kwargs)) + +def delete(url, **kwargs): + return requests.delete(_fix_url(url), **_fix_kwargs(kwargs)) diff --git a/tools/upload_release_files.py b/tools/upload_release_files.py new file mode 100755 index 0000000..35abd50 --- /dev/null +++ b/tools/upload_release_files.py @@ -0,0 +1,35 @@ +#! /usr/bin/env python3 + +import os +import os.path +import sys +import uritemplate + +sys.path.append("adabot") +import github_requests as github + +exit_status = 0 + +for dirpath, dirnames, filenames in os.walk("../bin"): + if not filenames: + continue + for filename in filenames: + full_filename = os.path.join(dirpath, filename) + label = filename.replace("adafruit-circuitpython-", "") + url_vars = {} + url_vars["name"] = filename + url_vars["label"] = label + url = uritemplate.expand(os.environ["UPLOAD_URL"], url_vars) + headers = {"content-type": "application/octet-stream"} + print(url) + with open(full_filename, "rb") as f: + response = github.post(url, data=f, headers=headers) + if not response.ok: + if response.status_code == 422 and response.json().get("errors", [{"code":""}])[0]["code"] == "already_exists": + print("File already uploaded. Skipping.") + continue + print("Upload of {} failed with {}.".format(filename, response.status_code)) + print(response.text) + sys.exit(response.status_code) + +sys.exit(exit_status)