diff options
author | Christopher Haster <chaster@utexas.edu> | 2021-01-05 12:12:39 +0300 |
---|---|---|
committer | Christopher Haster <chaster@utexas.edu> | 2021-01-10 22:20:11 +0300 |
commit | c9110617b3833a3020e7f13025f2055c549e1b08 (patch) | |
tree | 2190e713b4d7f148fa67c515eb86f51f02a596b8 /.github/workflows/release.yml | |
parent | 104d65113d4a73e4f38cc976e70a3afeb743d52a (diff) |
Added post-release script, cleaned up workflows
This helps an outstanding maintainer annoyance: updating dependencies to
bring in new versions on each littlefs release.
But instead of adding a bunch of scripts to the tail end of the release
workflow, the post-release script just triggers a single
"repository_dispatch" event in the newly created littlefs.post-release
repo. From there any number of post-release workflows can be run.
This indirection should let the post-release scripts move much quicker
than littlefs itself, which helps offset how fragile these sort of scripts
are.
---
Also finished cleaning up the workflows now that they are mostly
working.
Diffstat (limited to '.github/workflows/release.yml')
-rw-r--r-- | .github/workflows/release.yml | 129 |
1 files changed, 85 insertions, 44 deletions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0560eca..460ac60 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,14 +7,13 @@ on: jobs: release: - runs-on: ubuntu-latest + runs-on: ubuntu-18.04 # need to manually check for a couple things # - tests passed? # - we are the most recent commit on master? - if: | - github.event.workflow_run.conclusion == 'success' && - github.event.workflow_run.head_sha == github.sha + if: ${{github.event.workflow_run.conclusion == 'success' && + github.event.workflow_run.head_sha == github.sha}} steps: - uses: actions/checkout@v2 @@ -71,33 +70,78 @@ jobs: # try to find results from tests - name: collect-results run: | - [ -e results/code-thumb.csv ] && \ - ./scripts/code.py -u results/code-thumb.csv -s \ - | awk 'NR==2 {printf "Code size,%d B\n",$2}' \ - >> results.csv - [ -e results/code-thumb-readonly.csv ] && \ - ./scripts/code.py -u results/code-thumb-readonly.csv -s \ - | awk 'NR==2 {printf "Code size (readonly),%d B\n",$2}' \ - >> results.csv - [ -e results/code-thumb-threadsafe.csv ] && \ - ./scripts/code.py -u results/code-thumb-threadsafe.csv -s \ - | awk 'NR==2 {printf "Code size (threadsafe),%d B\n",$2}' \ - >> results.csv - [ -e results/code-thumb-migrate.csv ] && \ - ./scripts/code.py -u results/code-thumb-migrate.csv -s \ - | awk 'NR==2 {printf "Code size (migrate),%d B\n",$2}' \ - >> results.csv - [ -e results/coverage.csv ] && \ - ./scripts/coverage.py -u results/coverage.csv -s \ - | awk 'NR==2 {printf "Coverage,%.1f%% of %d lines\n",$4,$3}' \ - >> results.csv - + # previous results to compare against? + [ -n "$LFS_PREV_VERSION" ] && curl -sS \ + "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/` + `status/$LFS_PREV_VERSION" \ + | jq -re 'select(.sha != env.GITHUB_SHA) | .statuses[]' \ + >> prev-results.json \ + || true + + # unfortunately these each have their own format + [ -e results/code-thumb.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / code").description + | capture("Code size is (?<result>[0-9]+)").result' \ + prev-results.json || echo 0)" + ./scripts/code.py -u results/code-thumb.csv -s | awk ' + NR==2 {printf "Code size,%d B",$2} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + [ -e results/code-thumb-readonly.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / code (readonly)").description + | capture("Code size is (?<result>[0-9]+)").result' \ + prev-results.json || echo 0)" + ./scripts/code.py -u results/code-thumb-readonly.csv -s | awk ' + NR==2 {printf "Code size (readonly),%d B",$2} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + [ -e results/code-thumb-threadsafe.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / code (threadsafe)").description + | capture("Code size is (?<result>[0-9]+)").result' \ + prev-results.json || echo 0)" + ./scripts/code.py -u results/code-thumb-threadsafe.csv -s | awk ' + NR==2 {printf "Code size (threadsafe),%d B",$2} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + [ -e results/code-thumb-migrate.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / code (migrate)").description + | capture("Code size is (?<result>[0-9]+)").result' \ + prev-results.json || echo 0)" + ./scripts/code.py -u results/code-thumb-migrate.csv -s | awk ' + NR==2 {printf "Code size (migrate),%d B",$2} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",100*($2-ENVIRON["PREV"])/ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + [ -e results/coverage.csv ] && ( \ + export PREV="$(jq -re ' + select(.context == "results / coverage").description + | capture("Coverage is (?<result>[0-9\\.]+)").result' \ + prev-results.json || echo 0)" + ./scripts/coverage.py -u results/coverage.csv -s | awk -F '[ /%]+' ' + NR==2 {printf "Coverage,%.1f%% of %d lines",$4,$3} + NR==2 && ENVIRON["PREV"]+0 != 0 { + printf " (%+.1f%%)",$4-ENVIRON["PREV"]} + NR==2 {printf "\n"}' \ + >> results.csv) + + # transpose to GitHub table [ -e results.csv ] || exit 0 awk -F ',' ' {label[NR]=$1; value[NR]=$2} END { for (r=1; r<=NR; r++) {printf "| %s ",label[r]}; printf "|\n"; - for (r=1; r<=NR; r++) {printf "|--:"}; printf "|\n"; + for (r=1; r<=NR; r++) {printf "|:--"}; printf "|\n"; for (r=1; r<=NR; r++) {printf "| %s ",value[r]}; printf "|\n"}' \ results.csv > results.txt echo "RESULTS:" @@ -106,20 +150,25 @@ jobs: # find changes from history - name: collect-changes run: | - [ ! -z "$LFS_PREV_VERSION" ] || exit 0 - git log --oneline "$LFS_PREV_VERSION.." \ - --grep='^Merge' --invert-grep > changes.txt + [ -n "$LFS_PREV_VERSION" ] || exit 0 + # use explicit link to github commit so that release notes can + # be copied elsewhere + git log "$LFS_PREV_VERSION.." \ + --grep='^Merge' --invert-grep \ + --format="format:[\`%h\`](` + `https://github.com/$GITHUB_REPOSITORY/commit/%h) %s" \ + > changes.txt echo "CHANGES:" cat changes.txt - + # create and update major branches (vN and vN-prefix) - - name: build-major-branches + - name: create-major-branches run: | # create major branch git branch "v$LFS_VERSION_MAJOR" HEAD # create major prefix branch - git config user.name ${{secrets.BOT_USERNAME}} + git config user.name ${{secrets.BOT_USER}} git config user.email ${{secrets.BOT_EMAIL}} git fetch "https://github.com/$GITHUB_REPOSITORY.git" \ "v$LFS_VERSION_MAJOR-prefix" || true @@ -137,27 +186,19 @@ jobs: "v$LFS_VERSION_MAJOR-prefix" # build release notes - - name: build-release + - name: create-release run: | - # find changes since last release - #if [ ! -z "$LFS_PREV_VERSION" ] - #then - # export CHANGES="$(git log --oneline "$LFS_PREV_VERSION.." \ - # --grep='^Merge' --invert-grep)" - # printf "CHANGES\n%s\n\n" "$CHANGES" - #fi - # create release and patch version tag (vN.N.N) # only draft if not a patch release [ -e results.txt ] && export RESULTS="$(cat results.txt)" [ -e changes.txt ] && export CHANGES="$(cat changes.txt)" - curl -sS -H "authorization: token ${{secrets.BOT_TOKEN}}" \ + curl -sS -X POST -H "authorization: token ${{secrets.BOT_TOKEN}}" \ "$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/releases" \ - -d "$(jq -sR '{ + -d "$(jq -n '{ tag_name: env.LFS_VERSION, name: env.LFS_VERSION | rtrimstr(".0"), target_commitish: "${{github.event.workflow_run.head_sha}}", draft: env.LFS_VERSION | endswith(".0"), body: [env.RESULTS, env.CHANGES | select(.)] | join("\n\n")}' \ - | tee /dev/stderr)" > /dev/null + | tee /dev/stderr)" |