-
Notifications
You must be signed in to change notification settings - Fork 86
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2,341 changed files
with
141,193 additions
and
47,243 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 |
---|---|---|
@@ -0,0 +1,38 @@ | ||
#!/bin/bash | ||
|
||
# Auto-cancel preceding workflows | ||
# https://discuss.circleci.com/t/workaround-auto-cancel-redundant-builds-on-the-default-branch/39468 | ||
|
||
set -x | ||
|
||
## Get the name of the workflow and the related pipeline number | ||
curl --header "Circle-Token: $PERS_API_TOKEN_BOOST_5" --request GET "https://circleci.com/api/v2/workflow/${CIRCLE_WORKFLOW_ID}" -o current_workflow.json | ||
WF_NAME=$(jq -r '.name' current_workflow.json) | ||
CURRENT_PIPELINE_NUM=$(jq -r '.pipeline_number' current_workflow.json) | ||
CURRENT_PIPELINE_CREATED=$(jq -r '.created_at' current_workflow.json) | ||
TIME_THRESHOLD=$(date --utc +'%Y-%m-%dT%TZ' -d "${CURRENT_PIPELINE_CREATED} -10 minutes") | ||
|
||
## Get the IDs of pipelines created by the current user on the same branch. (Only consider pipelines that have a pipeline number inferior to the current pipeline) | ||
PIPE_IDS=$(curl --header "Circle-Token: $PERS_API_TOKEN_BOOST_5" --request GET "https://circleci.com/api/v2/project/gh/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME/pipeline?branch=$CIRCLE_BRANCH"|jq -r --argjson CURRENT_PIPELINE_NUM "$CURRENT_PIPELINE_NUM" --arg TIME_THRESHOLD "${TIME_THRESHOLD}" '.items[] | select(.state == "created") | select(.number < $CURRENT_PIPELINE_NUM) | select(.created_at > $TIME_THRESHOLD) | .id') | ||
|
||
## Get the IDs of currently running/on_hold workflows that have the same name as the current workflow, in all previously created pipelines. | ||
if [ ! -z "$PIPE_IDS" ]; then | ||
for PIPE_ID in $PIPE_IDS | ||
do | ||
curl --header "Circle-Token: $PERS_API_TOKEN_BOOST_5" --request GET "https://circleci.com/api/v2/pipeline/${PIPE_ID}/workflow"|jq -r --arg WF_NAME "${WF_NAME}" '.items[]|select(.status == "on_hold" or .status == "running") | select(.name == $WF_NAME) | .id' >> WF_to_cancel.txt | ||
done | ||
fi | ||
|
||
## Cancel any currently running/on_hold workflow with the same name | ||
if [ -s WF_to_cancel.txt ]; then | ||
echo "Cancelling the following workflow(s):" | ||
cat WF_to_cancel.txt | ||
while read WF_ID; | ||
do | ||
curl --header "Circle-Token: $PERS_API_TOKEN_BOOST_5" --request POST https://circleci.com/api/v2/workflow/$WF_ID/cancel | ||
done < WF_to_cancel.txt | ||
## Allowing some time to complete the cancellation | ||
sleep 2 | ||
else | ||
echo "Nothing to cancel" | ||
fi |
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
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
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 |
---|---|---|
@@ -0,0 +1,107 @@ | ||
name: Commit Bot | ||
|
||
# To avoid infinite loops, don't trigger on "push" | ||
on: | ||
schedule: | ||
- cron: "0,30 * * * *" | ||
|
||
concurrency: | ||
group: ${{format('commit-bot-{0}:{1}', github.repository, github.ref)}} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
update-modules: | ||
runs-on: ubuntu-latest | ||
name: Commit Bot | ||
if: github.repository == 'boostorg/boost' | ||
|
||
steps: | ||
- name: Check for module updates | ||
id: branches | ||
run: | | ||
if [[ "${{ github.event_name }}" == "push" ]]; then | ||
branches="${{ github.ref_name }}" | ||
else | ||
branches="master develop" | ||
fi | ||
echo "branches=$branches" >> $GITHUB_OUTPUT | ||
- name: Checkout master repository | ||
uses: actions/checkout@v4 | ||
if: contains(steps.branches.outputs.branches, 'master') | ||
with: | ||
ref: master | ||
path: master | ||
persist-credentials: false | ||
|
||
- name: Checkout develop repository | ||
uses: actions/checkout@v4 | ||
if: contains(steps.branches.outputs.branches, 'develop') | ||
with: | ||
ref: develop | ||
path: develop | ||
persist-credentials: false | ||
|
||
- name: Check for module updates | ||
run: | | ||
branches="${{ steps.branches.outputs.branches }}" | ||
# Set up Git | ||
git config --global user.name "boost-commitbot" | ||
git config --global user.email "[email protected]" | ||
# Update each branch | ||
for branch in $branches; do | ||
cd $branch | ||
module_paths=$(git config --file .gitmodules --get-regexp '^submodule\..*\.path$') | ||
while IFS=' ' read -r key path; do | ||
submodule_name=$(echo "$key" | awk -F '.' '{print $2}') | ||
submodule_path=$(echo "$path") | ||
url=$(git config --file .gitmodules --get-regexp "^submodule\.$submodule_name\.url$" | awk '{print $2}') | ||
if [[ ! "$url" =~ ^https:// ]]; then | ||
basicreponame=$(basename $url) | ||
url=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY_OWNER}/${basicreponame} | ||
fi | ||
hash=$(git ls-remote "$url" "refs/heads/$branch" | cut -f 1) | ||
hash="${hash#"${hash%%[![:space:]]*}"}" | ||
hash="${hash%"${hash##*[![:space:]]}"}" | ||
commit_id="${hash:0:8}" | ||
previous_hash=$(git ls-tree HEAD "$submodule_path" | awk '{print $3}') | ||
previous_hash="${previous_hash#"${previous_hash%%[![:space:]]*}"}" | ||
previous_hash="${previous_hash%"${previous_hash##*[![:space:]]}"}" | ||
previous_commit_id="${previous_hash:0:8}" | ||
if [ "$hash" == "$previous_hash" ]; then | ||
echo "$submodule_name ($commit_id): OK" | ||
else | ||
echo "$submodule_name: $previous_commit_id -> $commit_id" | ||
set -x | ||
set +e | ||
git submodule update --init "$submodule_path" | ||
git submodule update --remote "$submodule_path" | ||
git add "$submodule_path" | ||
git commit -m "Update $submodule_name from $branch" | ||
set -e | ||
set +x | ||
fi | ||
done <<< "$module_paths" | ||
cd .. | ||
done | ||
- name: Push changes from master | ||
uses: ad-m/[email protected] | ||
if: contains(steps.branches.outputs.branches, 'master') | ||
with: | ||
# github_token: ${{ secrets.GITHUB_TOKEN }} | ||
github_token: ${{ secrets.CI_PAT }} | ||
branch: master | ||
directory: master | ||
|
||
- name: Push changes from develop | ||
uses: ad-m/[email protected] | ||
if: contains(steps.branches.outputs.branches, 'develop') | ||
with: | ||
# github_token: ${{ secrets.GITHUB_TOKEN }} | ||
github_token: ${{ secrets.CI_PAT }} | ||
branch: develop | ||
directory: develop | ||
|
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
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
Oops, something went wrong.