-
Notifications
You must be signed in to change notification settings - Fork 805
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added automatic version prefixing to releases
The script itself is a part of .travis.yml, using ./scripts/prefix.py for applying prefixes to the source code. This purpose of the automatic job is to provide a branch containing version prefixes, to avoid name conflicts in binaries containing different major versions of littlefs with only a git clone. As a part of each release, two branches and a tag are created: - vN - moving branch - vN-prefix - moving branch - vN.N.N - immutable tag The major version branch (vM) is created on major releases, but updated every patch release. The patch version tag (vM.M.P) is created every patch release. Patch releases occur every time a commit is merged into master, though multiple merges may be coalesced. The major prefix branch (vM-prefix) is modified with the ./scripts/prefix.py script. Note that this branch is updated as a synthetic merge commit with the previous history of vM-prefix. The reason for this is to allow users to easily update vM-prefix with a `git pull` as they would for other branches. A---B---C---D---E master, v1, v1.7.3 \ \ \ F-------G---H v1-prefix
- Loading branch information
Showing
1 changed file
with
72 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -35,7 +35,7 @@ script: | |
if [ "$TRAVIS_TEST_RESULT" -eq 0 ] | ||
then | ||
CURR=$(tail -n1 sizes | awk '{print $1}') | ||
PREV=$(curl -u $GEKY_BOT_STATUSES https://api.github.com/repos/$TRAVIS_REPO_SLUG/status/master \ | ||
PREV=$(curl -u "$GEKY_BOT_STATUSES" https://api.github.com/repos/$TRAVIS_REPO_SLUG/status/master \ | ||
| jq -re "select(.sha != \"$TRAVIS_COMMIT\") | ||
| .statuses[] | select(.context == \"$STAGE/$NAME\").description | ||
| capture(\"code size is (?<size>[0-9]+)\").size" \ | ||
|
@@ -100,6 +100,7 @@ jobs: | |
env: | ||
- STAGE=test | ||
- NAME=littlefs-fuse | ||
if: branch !~ -prefix$ | ||
install: | ||
- sudo apt-get install libfuse-dev | ||
- git clone --depth 1 https://github.com/geky/littlefs-fuse | ||
|
@@ -128,70 +129,88 @@ jobs: | |
- ls | ||
- make -B test_dirs test_files QUIET=1 | ||
|
||
# Automatically update releases | ||
# Automatically create releases | ||
- stage: deploy | ||
env: | ||
- STAGE=deploy | ||
- NAME=deploy | ||
script: | ||
# Find version defined in lfs.h | ||
- LFS_VERSION=$(grep -ox '#define LFS_VERSION .*' lfs.h | cut -d ' ' -f3) | ||
- LFS_VERSION_MAJOR=$((0xffff & ($LFS_VERSION >> 16))) | ||
- LFS_VERSION_MINOR=$((0xffff & ($LFS_VERSION >> 0))) | ||
# Grab latests patch from repo tags, default to 0, needs finagling to get past github's pagination api | ||
- PREV_URL=https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs/tags/v$LFS_VERSION_MAJOR.$LFS_VERSION_MINOR. | ||
- PREV_URL=$(curl -u "$GEKY_BOT_RELEASES" "$PREV_URL" -I | ||
| sed -n '/^Link/{s/.*<\(.*\)>; rel="last"/\1/;p;q0};$q1' | ||
|| echo $PREV_URL) | ||
- LFS_VERSION_PATCH=$(curl -u "$GEKY_BOT_RELEASES" "$PREV_URL" | ||
| jq 'map(.ref | match("\\bv.*\\..*\\.(.*)$";"g") | ||
.captures[].string | tonumber) | max + 1' | ||
|| echo 0) | ||
# We have our new version | ||
- LFS_VERSION="v$LFS_VERSION_MAJOR.$LFS_VERSION_MINOR.$LFS_VERSION_PATCH" | ||
- echo "VERSION $LFS_VERSION" | ||
- | | ||
bash << 'SCRIPT' | ||
set -ev | ||
# Find version defined in lfs.h | ||
LFS_VERSION=$(grep -ox '#define LFS_VERSION .*' lfs.h | cut -d ' ' -f3) | ||
LFS_VERSION_MAJOR=$((0xffff & ($LFS_VERSION >> 16))) | ||
LFS_VERSION_MINOR=$((0xffff & ($LFS_VERSION >> 0))) | ||
# Grab latests patch from repo tags, default to 0, needs finagling | ||
# to get past github's pagination api | ||
PREV_URL=https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs/tags/v$LFS_VERSION_MAJOR.$LFS_VERSION_MINOR. | ||
PREV_URL=$(curl -u "$GEKY_BOT_RELEASES" "$PREV_URL" -I \ | ||
| sed -n '/^Link/{s/.*<\(.*\)>; rel="last"/\1/;p;q0};$q1' \ | ||
|| echo $PREV_URL) | ||
LFS_VERSION_PATCH=$(curl -u "$GEKY_BOT_RELEASES" "$PREV_URL" \ | ||
| jq 'map(.ref | match("\\bv.*\\..*\\.(.*)$";"g") | ||
.captures[].string | tonumber) | max + 1' \ | ||
|| echo 0) | ||
# We have our new version | ||
LFS_VERSION="v$LFS_VERSION_MAJOR.$LFS_VERSION_MINOR.$LFS_VERSION_PATCH" | ||
echo "VERSION $LFS_VERSION" | ||
# Check that we're the most recent commit | ||
CURRENT_COMMIT=$(curl -f -u "$GEKY_BOT_RELEASES" \ | ||
https://api.github.com/repos/$TRAVIS_REPO_SLUG/commits/master \ | ||
| jq -re '.sha') | ||
if [ "$TRAVIS_COMMIT" == "$CURRENT_COMMIT" ] | ||
https://api.github.com/repos/$TRAVIS_REPO_SLUG/commits/master \ | ||
| jq -re '.sha') | ||
[ "$TRAVIS_COMMIT" == "$CURRENT_COMMIT" ] || exit 0 | ||
# Create major branch | ||
git branch v$LFS_VERSION_MAJOR HEAD | ||
# Create major prefix branch | ||
git config user.name "geky bot" | ||
git config user.email "[email protected]" | ||
git fetch https://github.com/$TRAVIS_REPO_SLUG.git \ | ||
--depth=50 v$LFS_VERSION_MAJOR-prefix || true | ||
./scripts/prefix.py lfs$LFS_VERSION_MAJOR | ||
git branch v$LFS_VERSION_MAJOR-prefix $( \ | ||
git commit-tree $(git write-tree) \ | ||
$(git rev-parse --verify -q FETCH_HEAD | sed -e 's/^/-p /') \ | ||
-p HEAD \ | ||
-m "Generated v$LFS_VERSION_MAJOR prefixes") | ||
git reset --hard | ||
# Update major version branches (vN and vN-prefix) | ||
git push https://[email protected]/$TRAVIS_REPO_SLUG.git \ | ||
v$LFS_VERSION_MAJOR \ | ||
v$LFS_VERSION_MAJOR-prefix | ||
# Create patch version tag (vN.N.N) | ||
curl -f -u "$GEKY_BOT_RELEASES" -X POST \ | ||
https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs \ | ||
-d "{ | ||
\"ref\": \"refs/tags/$LFS_VERSION\", | ||
\"sha\": \"$TRAVIS_COMMIT\" | ||
}" | ||
# Create minor release? | ||
[[ "$LFS_VERSION" == *.0 ]] || exit 0 | ||
# Build release notes | ||
PREV=$(git tag --sort=-v:refname -l "v*.0" | head -1) | ||
if [ ! -z "$PREV" ] | ||
then | ||
# Create a simple tag | ||
curl -f -u "$GEKY_BOT_RELEASES" -X POST \ | ||
https://api.github.com/repos/$TRAVIS_REPO_SLUG/git/refs \ | ||
-d "{ | ||
\"ref\": \"refs/tags/$LFS_VERSION\", | ||
\"sha\": \"$TRAVIS_COMMIT\" | ||
}" | ||
# Minor release? | ||
if [[ "$LFS_VERSION" == *.0 ]] | ||
then | ||
# Build release notes | ||
PREV=$(git tag --sort=-v:refname -l "v*.0" | head -1) | ||
if [ ! -z "$PREV" ] | ||
then | ||
echo "PREV $PREV" | ||
CHANGES=$'### Changes\n\n'$( \ | ||
git log --oneline $PREV.. --grep='^Merge' --invert-grep) | ||
printf "CHANGES\n%s\n\n" "$CHANGES" | ||
fi | ||
# Create the release | ||
curl -f -u "$GEKY_BOT_RELEASES" -X POST \ | ||
https://api.github.com/repos/$TRAVIS_REPO_SLUG/releases \ | ||
-d "{ | ||
\"tag_name\": \"$LFS_VERSION\", | ||
\"name\": \"${LFS_VERSION%.0}\", | ||
\"draft\": true, | ||
\"body\": $(jq -sR '.' <<< "$CHANGES") | ||
}" | ||
fi | ||
echo "PREV $PREV" | ||
CHANGES=$'### Changes\n\n'$( \ | ||
git log --oneline $PREV.. --grep='^Merge' --invert-grep) | ||
printf "CHANGES\n%s\n\n" "$CHANGES" | ||
fi | ||
# Create the release | ||
curl -f -u "$GEKY_BOT_RELEASES" -X POST \ | ||
https://api.github.com/repos/$TRAVIS_REPO_SLUG/releases \ | ||
-d "{ | ||
\"tag_name\": \"$LFS_VERSION\", | ||
\"name\": \"${LFS_VERSION%.0}\", | ||
\"draft\": true, | ||
\"body\": $(jq -sR '.' <<< "$CHANGES") | ||
}" #" | ||
SCRIPT | ||
# Manage statuses | ||
before_install: | ||
- | | ||
curl -u $GEKY_BOT_STATUSES -X POST \ | ||
curl -u "$GEKY_BOT_STATUSES" -X POST \ | ||
https://api.github.com/repos/$TRAVIS_REPO_SLUG/statuses/${TRAVIS_PULL_REQUEST_SHA:-$TRAVIS_COMMIT} \ | ||
-d "{ | ||
\"context\": \"$STAGE/$NAME\", | ||
|
@@ -202,7 +221,7 @@ before_install: | |
after_failure: | ||
- | | ||
curl -u $GEKY_BOT_STATUSES -X POST \ | ||
curl -u "$GEKY_BOT_STATUSES" -X POST \ | ||
https://api.github.com/repos/$TRAVIS_REPO_SLUG/statuses/${TRAVIS_PULL_REQUEST_SHA:-$TRAVIS_COMMIT} \ | ||
-d "{ | ||
\"context\": \"$STAGE/$NAME\", | ||
|
@@ -213,7 +232,7 @@ after_failure: | |
after_success: | ||
- | | ||
curl -u $GEKY_BOT_STATUSES -X POST \ | ||
curl -u "$GEKY_BOT_STATUSES" -X POST \ | ||
https://api.github.com/repos/$TRAVIS_REPO_SLUG/statuses/${TRAVIS_PULL_REQUEST_SHA:-$TRAVIS_COMMIT} \ | ||
-d "{ | ||
\"context\": \"$STAGE/$NAME\", | ||
|