Add new implementation versions #321
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
name: Add new implementation versions | |
on: | |
workflow_dispatch: | |
schedule: | |
# “At minute 36 past every 24th hour.” - https://crontab.guru/#36_*/24_*_*_* | |
- cron: '36 */24 * * *' | |
defaults: | |
run: | |
shell: bash | |
permissions: | |
contents: write | |
pull-requests: write | |
actions: write | |
jobs: | |
add: | |
name: Add new ${{ matrix.repository_name }} version to ${{ matrix.test_name }} | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- repository_name: go-libp2p | |
implementation_name: go-libp2p | |
test_name: perf | |
implementation_update_script: | | |
sed -i "1s/$LOCAL_MAJOR_MINOR_VERSION/$REMOTE_MAJOR_MINOR_VERSION/g" go.mod | |
go mod tidy -go=$GO_MAJOR_MINOR_VERSION | |
go mod tidy | |
go get github.com/libp2p/go-libp2p@$REMOTE_VERSION | |
- repository_name: go-libp2p | |
implementation_name: go | |
test_name: transport-interop | |
implementation_update_script: | | |
sed -i "s/image_name := go-${LOCAL_MAJOR_MINOR_VERSION}/image_name := go-${REMOTE_MAJOR_MINOR_VERSION}/g" Makefile | |
sed -i "s/version := ${LOCAL_MAJOR_MINOR_VERSION#v}\..*/version := ${REMOTE_VERSION#v}/g" Makefile | |
make version.lock | |
- repository_name: rust-libp2p | |
implementation_name: rust-libp2p | |
test_name: perf | |
implementation_update_script: | | |
sed -i "s/commitSha := .*/commitSha := ${REMOTE_SHA}/g" Makefile | |
- repository_name: rust-libp2p | |
implementation_name: rust | |
test_name: transport-interop | |
implementation_update_script: | | |
sed -i "s/image_name := rust-${LOCAL_MAJOR_MINOR_VERSION}/image_name := rust-${REMOTE_MAJOR_MINOR_VERSION}/g" Makefile | |
sed -i "s/commitSha := .*/commitSha := ${REMOTE_SHA}/g" Makefile | |
- repository_name: js-libp2p | |
implementation_name: js-libp2p | |
test_name: perf | |
implementation_update_script: | | |
suffix="$(echo "${REMOTE_MAJOR_MINOR_VERSION#v}" | sed 's/\./-/g')" | |
sed -i "s/perf-js-libp2p-[^\"]*/perf-js-libp2p-$suffix/g" package.json | |
npm install libp2p@$REMOTE_VERSION | |
- repository_name: js-libp2p | |
implementation_name: js | |
test_name: transport-interop | |
implementation_update_script: | | |
sed -i "s/image_name := js-${LOCAL_MAJOR_MINOR_VERSION}\..*/image_name := js-${REMOTE_VERSION}/g" Makefile | |
npm install libp2p@$REMOTE_VERSION | |
env: | |
BRANCH: add/${{ matrix.test_name }}/${{ matrix.repository_name }} | |
steps: | |
- name: Checkout test-plans | |
uses: actions/checkout@v4 | |
- name: Configure git | |
run: | | |
git fetch origin $BRANCH && git checkout $BRANCH || git checkout -b $BRANCH | |
git rebase $GITHUB_REF -X theirs || git rebase --abort | |
git config --global user.email [email protected] | |
git config --global user.name $GITHUB_ACTOR | |
- id: go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: stable | |
- name: Get the latest version (local) | |
id: local | |
env: | |
IMPLEMENTATION_DIRECTORY: ${{ matrix.test_name }}/impl/${{ matrix.implementation_name }} | |
run: | | |
pushd $IMPLEMENTATION_DIRECTORY | |
ls -d v* | sort -V | tail -n-1 | xargs -I{} echo "version={}" | tee -a $GITHUB_OUTPUT | |
popd | |
- name: Get the latest version (remote) | |
id: remote | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
REPOSITORY_NAME: ${{ matrix.repository_name }} | |
run: | | |
releases="$(gh api --paginate repos/libp2p/$REPOSITORY_NAME/releases)" | |
latest="$(jq 'map(select(.tag_name | startswith("libp2p-"))) | first' <<< "$releases")" | |
if [[ "$latest" == "null" ]]; then | |
latest="$(jq 'first' <<< "$releases")" | |
fi | |
tag_name=$(jq -r '.tag_name' <<< "$latest") | |
target_commitish=$(jq -r '.target_commitish' <<< "$latest") | |
echo "version=${tag_name#libp2p-}" | tee -a $GITHUB_OUTPUT | |
echo "target_commitish=${target_commitish}" | tee -a $GITHUB_OUTPUT | |
- id: mm | |
env: | |
REMOTE_VERSION: ${{ steps.remote.outputs.version }} | |
GO_VERSION: ${{ steps.go.outputs.go-version }} | |
run: | | |
echo $REMOTE_VERSION | sed 's/\.[0-9]*$//' | xargs -I{} echo "remote={}" | tee -a $GITHUB_OUTPUT | |
echo $GO_VERSION | sed 's/\.[0-9]*$//' | xargs -I{} echo "go={}" | tee -a $GITHUB_OUTPUT | |
- name: Add the latest version | |
if: ${{ !startsWith(steps.remote.outputs.version, steps.local.outputs.version) }} | |
env: | |
LOCAL_MAJOR_MINOR_VERSION: ${{ steps.local.outputs.version }} | |
REMOTE_VERSION: ${{ steps.remote.outputs.version }} | |
REMOTE_MAJOR_MINOR_VERSION: ${{ steps.mm.outputs.remote }} | |
REMOTE_SHA: ${{ steps.remote.outputs.sha }} | |
GO_VERSION: ${{ steps.go.outputs.go-version }} | |
GO_MAJOR_MINOR_VERSION: ${{ steps.mm.outputs.go }} | |
GITHUB_TOKEN: ${{ github.token }} | |
IMPLEMENTATION_DIRECTORY: ${{ matrix.test_name }}/impl/${{ matrix.implementation_name }} | |
VERSIONS_DIRECTORY: ${{ matrix.test_name == 'perf' && format('{0}/runner', matrix.test_name) || matrix.test_name }} | |
IMPLEMENTATION_NAME: ${{ matrix.implementation_name }} | |
REPOSITORY_NAME: ${{ matrix.repository_name }} | |
TEST_NAME: ${{ matrix.test_name }} | |
run: | | |
pushd $IMPLEMENTATION_DIRECTORY | |
cp -r $LOCAL_MAJOR_MINOR_VERSION $REMOTE_MAJOR_MINOR_VERSION | |
pushd $REMOTE_MAJOR_MINOR_VERSION | |
${{ matrix.implementation_update_script }} | |
popd | |
popd | |
pushd $VERSIONS_DIRECTORY | |
versions='' | |
if [[ "$TEST_NAME" == "perf" ]]; then | |
versions="$(jq '. + map(select(.implementation == env.IMPLEMENTATION_NAME and .id == env.LOCAL_MAJOR_MINOR_VERSION) | .id = env.REMOTE_MAJOR_MINOR_VERSION)' versionsInput.json)" | |
else | |
versions="$(jq '. + map(select(.id == "\(env.IMPLEMENTATION_NAME)-\(env.LOCAL_MAJOR_MINOR_VERSION)") | .id = "\(env.IMPLEMENTATION_NAME)-\(env.REMOTE_MAJOR_MINOR_VERSION)")' versionsInput.json)" | |
fi | |
echo "$versions" > versionsInput.json | |
popd | |
git add . | |
git commit -m "chore: add $REPOSITORY_NAME@$REMOTE_VERSION to $TEST_NAME" | |
git push origin $BRANCH --force | |
if [[ $(gh pr list --state open --base $GITHUB_REF --head $BRANCH | wc -l) -eq 0 ]]; then | |
gh pr create --title "chore: add $REPOSITORY_NAME@$REMOTE_VERSION to $TEST_NAME" --body "This PR adds $REPOSITORY_NAME@$REMOTE_VERSION to $TEST_NAME" --head $BRANCH --base $GITHUB_REF | |
fi | |
gh workflow run $TEST_NAME.yml --ref $BRANCH |