New workflow to display incremental changes in manifests (#473)
* New diffing script between consecutive releases * New workflow to get diffs * Testing fixes
This commit is contained in:
committed by
GitHub
parent
d4760633af
commit
6c8626208a
@@ -0,0 +1,46 @@
|
|||||||
|
# Show differences between the submitted manifest and the previous
|
||||||
|
# release of the same crate, to enable easier catching of problems
|
||||||
|
|
||||||
|
name: Diff release
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- 'index/**.toml'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
diff:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Check out alire-index
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
# Needed to be able to diff and obtain changed files. Furthermore, we
|
||||||
|
# need the full history or else grafted partial branches confuse the
|
||||||
|
# changed files detector
|
||||||
|
|
||||||
|
# - name: Set up GNAT toolchain (FSF)
|
||||||
|
# uses: ada-actions/toolchain@ce2020
|
||||||
|
# with:
|
||||||
|
# distrib: fsf # faster install?
|
||||||
|
|
||||||
|
- name: Set up stable `alr`
|
||||||
|
if: contains(github.base_ref, 'stable-')
|
||||||
|
uses: alire-project/setup-alire@v1
|
||||||
|
with:
|
||||||
|
toolchain: --disable-assistant # We don't need the compiler
|
||||||
|
|
||||||
|
- name: Set up devel `alr`
|
||||||
|
if: contains(github.base_ref, 'devel-')
|
||||||
|
uses: alire-project/setup-alire@v1
|
||||||
|
with:
|
||||||
|
toolchain: --disable-assistant # We don't need the compiler
|
||||||
|
branch: master
|
||||||
|
|
||||||
|
- name: Diff releases
|
||||||
|
run: scripts/diff-release.sh || true # No deal breaker if failed
|
||||||
|
shell: bash
|
||||||
Executable
+76
@@ -0,0 +1,76 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
trap 'echo "ERROR at line ${LINENO} (code: $?)" >&2' ERR
|
||||||
|
trap 'echo "Interrupted" >&2 ; exit 1' INT
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
|
||||||
|
# Ensure all alr runs are non-interactive
|
||||||
|
alias alr="alr -n"
|
||||||
|
|
||||||
|
# Detect changes
|
||||||
|
CHANGES=$(git diff --name-only HEAD~1)
|
||||||
|
|
||||||
|
# Bulk changes for the record
|
||||||
|
echo Changed files: $CHANGES
|
||||||
|
|
||||||
|
# Disable assistant. This is necessary despite the setup-alire action doing it
|
||||||
|
# too, because we sometimes run inside a Docker with fresh configuration
|
||||||
|
alr toolchain --disable-assistant
|
||||||
|
|
||||||
|
# Configure index
|
||||||
|
alr index --del local >/dev/null || true # Simplifies local testing
|
||||||
|
alr index --name local --add ./index
|
||||||
|
|
||||||
|
# Remove community index in case it has been added before
|
||||||
|
alr index --del community >/dev/null || true
|
||||||
|
|
||||||
|
diff_opts=(--minimal -U0 --line-prefix "--| " --ignore-all-space --ignore-blank-lines --ignore-cr-at-eol)
|
||||||
|
|
||||||
|
function diff_one() {
|
||||||
|
local file="$1"
|
||||||
|
local folder=$(dirname $file)
|
||||||
|
local crate=$(basename $file .toml | cut -f1 -d-)
|
||||||
|
local version=$(basename $file .toml | cut -f2- -d-)
|
||||||
|
local milestone="$crate=$version"
|
||||||
|
|
||||||
|
echo " "
|
||||||
|
echo "------8<------"
|
||||||
|
|
||||||
|
if echo $milestone | grep -q external; then
|
||||||
|
echo DIFFING external: $milestone
|
||||||
|
git diff "${diff_opts[@]}" HEAD~1 -- $file
|
||||||
|
else
|
||||||
|
echo DIFFING release: $milestone
|
||||||
|
|
||||||
|
# Locate the immediately precedent release
|
||||||
|
|
||||||
|
# For a first release, there's nothing to compare
|
||||||
|
if [ $(ls $folder | grep -v external | wc -l) -eq 1 ]; then
|
||||||
|
echo NOTHING to diff against, first crate release
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Othewise, get from alr what's the immediately preceding version
|
||||||
|
local prev_milestone=$(alr show "$crate<$version" | head -1 | cut -f1 -d:)
|
||||||
|
echo DIFFING milestones $prev_milestone '-->' $milestone
|
||||||
|
|
||||||
|
if [ "$prev_milestone" == "ERROR" ]; then
|
||||||
|
echo ERROR extracting milestone:
|
||||||
|
alr show "$crate<$version"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Convert into filename
|
||||||
|
local prev_file=$folder/${prev_milestone//=/-}.toml
|
||||||
|
|
||||||
|
git diff --no-index "${diff_opts[@]}" -- $prev_file $file
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
for file in $CHANGES; do
|
||||||
|
diff_one "$file" || true # keep on trying for different files
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user