Skip to content

Commit

Permalink
Merge pull request #15 from bekcpear/release-sh
Browse files Browse the repository at this point in the history
release: script update and add release github action
  • Loading branch information
carbonfix authored Jun 18, 2024
2 parents 637c21a + 43b8bca commit d0cba43
Show file tree
Hide file tree
Showing 3 changed files with 168 additions and 38 deletions.
145 changes: 145 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
name: arduino duo release

on:
push:
tags:
- 'v*.*.*'
- 'V*.*.*'
paths-ignore:
- '.github/workflows/docs.yml'
- 'docs/**'
workflow_dispatch:
inputs:
force-update:
description: (DANGER!!) force updating the package_sg200x_index.json file
required: false
type: string

concurrency:
group: "pages"
cancel-in-progress: false

jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- name: checkout current triggered tag
if: github.event_name == 'push'
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: checkout input tag
if: github.event_name == 'workflow_dispatch'
uses: actions/checkout@v4
with:
ref: ${{ inputs.tag }}
fetch-depth: 0
- name: setup python
uses: actions/setup-python@v5
with:
python-version: '3.x'

- name: Install Dependencies
run: pip3 install sphinx sphinx-copybutton sphinx_multiversion sphinx_rtd_theme

- name: Build
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
id: package-build
run: |
set -e
echo $PWD
echo $GITHUB_WORKSPACE
cd ./package/
./release.sh
. $GITHUB_ENV
if ! [[ ${INDEX_JSON_STATUS} =~ ^UPDATED_JSON:1 ]]; then
echo "The arduino-sophgo package no updates!" >&2
echo "Something wroing with the version number?" >&2
if [[ "${{ inputs.force-update }}" =~ ^(1|(Y|y)((E|e)(S|s))?|(T|t)rue)$ ]]; then
echo "force updating ..." >&2
else
exit 1
fi
fi
mv $GITHUB_WORKSPACE/../arduino-sophgo.zip $GITHUB_WORKSPACE/
mv $GITHUB_WORKSPACE/../$INDEX_JSON_FILE_NAME $GITHUB_WORKSPACE/
mv $GITHUB_WORKSPACE/../burntool.tar.gz $GITHUB_WORKSPACE/
mv $GITHUB_WORKSPACE/../burntool.zip $GITHUB_WORKSPACE/
- name: Build Doc
run: |
cd $GITHUB_WORKSPACE/docs
make html
tar -zcvf docs_html.tar.gz ./build/
mv docs_html.tar.gz $GITHUB_WORKSPACE/
- name: Create Release and Upload Release Asset
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
name: Release ${{ github.ref_name }}
body: TODO New Release.
draft: false
prerelease: false
files: |
arduino-sophgo.zip
${{ steps.package-build.outputs.index_json_file_name }}
burntool.tar.gz
burntool.zip
docs_html.tar.gz
- name: Install GitHub CLI for updating package index file within the specific release
run: sudo apt-get install -y gh
- name: Authenticate GitHub CLI
run: gh auth login --with-token <<< "${{ secrets.GITHUB_TOKEN }}"
- name: Get release by tag
id: get_release
env:
TAG_NAME: ${{ steps.package-build.outputs.index_json_file_release_tag }}
run: |
RELEASE_ID=$(gh api repos/$GITHUB_REPOSITORY/releases/tags/$TAG_NAME --jq '.id')
echo "id=$RELEASE_ID" >>$GITHUB_OUTPUT
- name: Upload new asset to release
env:
FILE_PATH: ${{ steps.package-build.outputs.index_json_file_name }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -e
_do() {
echo ">>>" "$@" >&2
"$@"
}
RELEASE_ID=${{ steps.get_release.outputs.id }}
FILE_NAME=$(basename $FILE_PATH)
if ! [[ -f "$FILE_PATH" ]]; then
echo "file '$FILE_PATH' not exist" >&2
exit 1
fi
ASSET_ID=$(_do gh api repos/$GITHUB_REPOSITORY/releases/$RELEASE_ID/assets --jq ".[] | select(.name == \"$FILE_NAME\") | .id")
if [[ -n "$ASSET_ID" ]]; then
# delete the old asset
gh api \
--method DELETE \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/$GITHUB_REPOSITORY/releases/assets/$ASSET_ID
fi
# upload the new asset
# gh api not work, weird
curl -L -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
-H "Content-Type: application/octet-stream" \
"https://uploads.github.com/repos/$GITHUB_REPOSITORY/releases/$RELEASE_ID/assets?name=$FILE_NAME" \
--data-binary "@$FILE_PATH"
- name: Check release assets
run: |
RELEASE_ID=${{ steps.get_release.outputs.id }}
gh api repos/$GITHUB_REPOSITORY/releases/$RELEASE_ID/assets --jq '.[].name'
2 changes: 2 additions & 0 deletions package/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
"repoName": "duo-arduino",
"downloadUrlFmt": "https://github.com/@REPOOWNER@/@REPONAME@/releases/download/@VERSION@/@ARCHIVENAME@",
"indexJsonFileName": "package_sg200x_index.json",
"milkvDuoIndexJsonFileReleaseTag": "config",
"milkvDuoIndexJsonFileUrl": "https://github.com/milkv-duo/duo-arduino/releases/download/config/package_sg200x_index.json",
"versionPrefix": "v"
},
"ignoredVersions": [],
Expand Down
59 changes: 21 additions & 38 deletions package/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,6 @@ fatal() {
exit "$ret"
}

gh_latest_two_tag() {
local owner=$1 name=$2
local res query query_f
local -a tags
printf -v query \
'{ "query": "query { repository(owner: \\\"%s\\\", name: \\\"%s\\\") { refs(refPrefix: \\\"refs/tags/\\\",orderBy: { field: TAG_COMMIT_DATE, direction: DESC }, first: 2) { edges { node { name } } } } }" }' \
"${owner}" "${name}"
res=$(_do curl -s -X POST \
-H "Accept: application/json" \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-d "${query}" https://api.github.com/graphql ) || return $?
tags=$(_do echo "$res" | _do jq --raw-output '.data.repository.refs.edges[].node.name')
echo -n "${tags[@]}"
}

CURDIR="$(dirname "$(realpath "$0")")"
REPODIR=$(realpath "${CURDIR}/../")
: "${WORKDIR:="$(realpath "${REPODIR}/../")"}"
Expand All @@ -69,6 +54,8 @@ jq_value() {

ARDUINO_VERSION="$(jq_value '.current .version')"
INDEX_JSON_FILE_NAME="$(jq_value '.basicInfo .indexJsonFileName')"
MILKV_DUO_INDEX_JSON_FILE_URL="$(jq_value '.basicInfo .milkvDuoIndexJsonFileUrl')"
MILKV_DUO_INDEX_JSON_FILE_RELEASE_TAG="$(jq_value '.basicInfo .milkvDuoIndexJsonFileReleaseTag')"
REPO_OWNER="$(jq_value '.basicInfo .repoOwner')"
REPO_NAME="$(jq_value '.basicInfo .repoName')"

Expand Down Expand Up @@ -179,20 +166,6 @@ create_package
INDEX_JSON_FILE="${WORKDIR}/${INDEX_JSON_FILE_NAME}"
INDEX_JSON_FILE_TMPL="${CURDIR}/${INDEX_JSON_FILE_NAME%.json}.template.json"

if [[ -z $GENERATE_FRESH_INDEX_JSON_FILE ]]; then
THE_LATEST_TWO_TAGS=( $(gh_latest_two_tag "$REPO_OWNER" "$REPO_NAME") )
for __latest_tag in "${THE_LATEST_TWO_TAGS[@]}"; do
INDEX_JSON_FILE_URL=$(
curl -H "Authorization: Token ${GITHUB_TOKEN}" \
"https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/releases/tags/${__latest_tag}" \
| jq --raw-output ".assets[] | select(.name == \"${INDEX_JSON_FILE_NAME}\") | .url"
) && break || true
done
fi
if [[ $INDEX_JSON_FILE_URL == "" ]]; then
GENERATE_FRESH_INDEX_JSON_FILE=1
fi

DOWNLOAD_URL_FMT="$(jq_value '.basicInfo .downloadUrlFmt')"
VERSION_PREFIX="$(jq_value '.basicInfo .versionPrefix')"
TOOL_DEPS_JSON=$(jq -c '.current .toolsDependencies | map({packager, name, version, source})' <<<"$CONFIG_JSON_DATA")
Expand Down Expand Up @@ -238,6 +211,14 @@ generate_tools_item_json() {
jq -c "{\"name\": \"${_name}\", \"version\": \"${_version}\", \"systems\": ${_systems_json} }" <<<"{}"
}

if [[ -z $GENERATE_FRESH_INDEX_JSON_FILE ]]; then
get_the_latest_index_json_file() {
_do curl -Lfo "$INDEX_JSON_FILE" "${MILKV_DUO_INDEX_JSON_FILE_URL}" || return 1
}
get_the_latest_index_json_file || \
GENERATE_FRESH_INDEX_JSON_FILE=1
fi

if [[ -n $GENERATE_FRESH_INDEX_JSON_FILE ]]; then
generate_fresh() {
local platform_json __json
Expand All @@ -254,16 +235,10 @@ if [[ -n $GENERATE_FRESH_INDEX_JSON_FILE ]]; then
}
generate_fresh
echo
echo ":::STATUS:FRESH_JSON"
INDEX_JSON_STATUS="FRESH_JSON"
else
ARDUINO_VERSION_UPDATED=0
TOOLS_DEPS_UPDATED=0
get_the_latest_index_json_file() {
curl -H "Authorization: Token ${GITHUB_TOKEN}" \
-H "Accept: application/octet-stream" \
-Lfo "$INDEX_JSON_FILE" "${INDEX_JSON_FILE_URL}"
}
get_the_latest_index_json_file

UPDATED_JSON="$(cat "$INDEX_JSON_FILE")"
ARDUINO_VERSION_REMOTE=$(jq --raw-output '.packages[0] .platforms[0] .version' "$INDEX_JSON_FILE")
Expand Down Expand Up @@ -306,10 +281,18 @@ else
echo
if [[ $ARDUINO_VERSION_UPDATED != 0 ]] || [[ $TOOLS_DEPS_UPDATED != 0 ]]; then
jq '.' <<<"$UPDATED_JSON" >"$INDEX_JSON_FILE"
echo ":::STATUS:UPDATED_JSON:${ARDUINO_VERSION_UPDATED}:${TOOLS_DEPS_UPDATED}"
INDEX_JSON_STATUS="UPDATED_JSON:${ARDUINO_VERSION_UPDATED}:${TOOLS_DEPS_UPDATED}"
else
echo ":::STATUS:NO_UPDATED"
INDEX_JSON_STATUS="NO_UPDATED"
fi
fi

echo ":::STATUS:${INDEX_JSON_STATUS}:${INDEX_JSON_FILE}"
echo "index_json_status=${INDEX_JSON_STATUS}" >>${GITHUB_OUTPUT:-/dev/null}
echo "INDEX_JSON_STATUS=${INDEX_JSON_STATUS}" >>${GITHUB_ENV:-/dev/null}
echo "index_json_file_name=${INDEX_JSON_FILE_NAME}" >>${GITHUB_OUTPUT:-/dev/null}
echo "INDEX_JSON_FILE_NAME=${INDEX_JSON_FILE_NAME}" >>${GITHUB_ENV:-/dev/null}
echo "index_json_file_release_tag=${MILKV_DUO_INDEX_JSON_FILE_RELEASE_TAG}" >>${GITHUB_OUTPUT:-/dev/null}
echo "INDEX_JSON_FILE_RELEASE_TAG=${MILKV_DUO_INDEX_JSON_FILE_RELEASE_TAG}" >>${GITHUB_ENV:-/dev/null}

# vim:sw=8:ts=8:noexpandtab

0 comments on commit d0cba43

Please sign in to comment.