Skip to content

Git action test [AllBridgeFacet v3.0.1] [@coderabbit ignore] #72

Git action test [AllBridgeFacet v3.0.1] [@coderabbit ignore]

Git action test [AllBridgeFacet v3.0.1] [@coderabbit ignore] #72

Workflow file for this run

name: Version Check
on:
pull_request:
types: [opened, edited, synchronize]
jobs:
check-version:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for all branches
- name: Fetch base branch
run: git fetch origin +refs/heads/${{ github.event.pull_request.base.ref }}:refs/remotes/origin/${{ github.event.pull_request.base.ref }}
- name: Get list of modified files
id: modified_files
run: |
BASE_REF="${{ github.event.pull_request.base.ref }}"
# get all files modified by this PR
FILES=$(git diff --name-only origin/${BASE_REF} HEAD)
# make sure that modified files of this PR are available
if [[ -z $FILES ]]; then
echo "No files found. This should not happen. Please check the code of the Github action"
exit 1
fi
# Initialize empty variables
CONTRACTS=""
# go through all file names and identify facet, periphery & diamond contracts (other contracts dont have versioning)
while IFS= read -r FILE; do
if echo "$FILE" | grep -E '^src/Facets/.*\.sol$'; then
# facet found
CONTRACTS="${CONTRACTS}${FILE}"$'\n'
elif echo "$FILE" | grep -E '^src/Periphery/.*\.sol$'; then
# periphery found
CONTRACTS="${CONTRACTS}${FILE}"$'\n'
elif echo "$FILE" | grep -E '^src/.*\.sol$'; then
# diamond contract found
CONTRACTS="${CONTRACTS}${FILE}"$'\n'
fi
done <<< "$FILES"
# if none found, exit here as there is nothing to do
if [[ -z "$CONTRACTS" ]]; then
echo "No facets or periphery contracts found in files modified/added by this PR"
exit 0
fi
# Write filenames to temporary files (using variables here was causing issues due to the file names)
echo -e "$FILES" > modified_files.txt
echo -e "$CONTRACTS" > modified_contracts.txt
- name: Check version tags and update PR title
id: check_versions
run: |
BASE_REF="${{ github.event.pull_request.base.ref }}"
# Read tmp files into variables
FILES=$(cat modified_files.txt)
echo "FILES=$FILES"
CONTRACTS=$(cat modified_contracts.txt)
echo -e "CONTRACTS=$CONTRACTS"
# Initialize variables
MISSING_VERSION_TAG=()
MISSING_VERSION_UPDATE=()
UPDATED_CONTRACTS=()
echo "--------------------"
# Process each file separately
while IFS= read -r FILE; do
echo "Now checking contract: $FILE"
VERSION_TAG=$(grep -E '^/// @custom:version' "$FILE" || true)
VERSION=$(echo "$VERSION_TAG" | sed -E 's/^\/\/\/ @custom:version ([0-9]+\.[0-9]+\.[0-9]+).*$/\1/' || true)
# Extract the filename without extension
FILENAME=$(basename "$FILE" .sol)
echo "File: $FILENAME, Version: $VERSION, Version_Tag: $VERSION_TAG"
# Check if version tag exists
if [[ -z "$VERSION_TAG" ]]; then
echo "File $FILENAME does not have a version tag at all"
MISSING_VERSION_TAG+=("$FILE")
else
echo "File $FILENAME does have a version tag"
# Check if version tag was updated in this PR
DIFF_OUTPUT=$(git diff origin/${BASE_REF} HEAD "$FILE")
# echo "Diff output: $DIFF_OUTPUT"
if echo "$DIFF_OUTPUT" | grep -qE '^\+/// @custom:version'; then
echo "Version was updated in $FILENAME"
CONTRACT_NAME=$(basename "$FILE" .sol)
NEW_VERSION=$(echo "$VERSION_TAG" | awk '{print $NF}')
TARGET_STRING="${CONTRACT_NAME} v${NEW_VERSION}"
UPDATED_CONTRACTS+=("$TARGET_STRING")
else
echo "Version was not updated in $FILENAME"
MISSING_VERSION_UPDATE+=("$FILE")
fi
fi
echo "--------------------"
done <<< "$CONTRACTS"
echo "A"
# Output the results
if [[ ${#MISSING_VERSION_TAG[@]} -ne 0 ]]; then
echo "Files missing version tags: ${MISSING_VERSION_TAG[*]}"
#echo -e "${MISSING_VERSION_TAG[*]}" > missing_version_tag.txt
fi
echo "B"
if [[ ${#MISSING_VERSION_UPDATE[@]} -ne 0 ]]; then
echo "Files with version tags not updated: ${MISSING_VERSION_UPDATE[*]}"
#echo -e "${MISSING_VERSION_UPDATE[*]}" > missing_version_update.txt
fi
echo "C"
# if there are any contracts that were (correctly) updated, add them to an array (so we can check the PR title after)
if [[ ${#UPDATED_CONTRACTS[@]} -ne 0 ]]; then
echo "Updated contracts and versions: ${UPDATED_CONTRACTS[*]}"
UPDATED_CONTRACTS_STR=$(IFS=,; echo "${UPDATED_CONTRACTS[*]}")
echo "UPDATED_CONTRACTS=$UPDATED_CONTRACTS_STR" >> $GITHUB_ENV
#echo -e "${UPDATED_CONTRACTS_STR[*]}" > updated_contracts.txt
fi
- name: Update PR title with updated version info
env:
PR_TITLE: ${{github.event.pull_request.title}}
UPDATED_CONTRACTS: ${{ steps.check_versions.outputs.UPDATED_CONTRACTS }}
UPDATED_CONTRACTS_STR: ${{ steps.check_versions.outputs.UPDATED_CONTRACTS_STR }}
run: |
echo "PR_TITLE: $PR_TITLE"
echo "UPDATED_CONTRACTS: $UPDATED_CONTRACTS"
echo "UPDATED_CONTRACTS_STR: $UPDATED_CONTRACTS_STR"
echo "UPDATED_CONTRACTS_STR: ${{ env.UPDATED_CONTRACTS_STR }}"
echo "UPDATED_CONTRACTS_STR: ${{ github.UPDATED_CONTRACTS_STR }}"
echo "-----------------------------------"
# Read tmp files into variables
MISSING_VERSION_TAG=$(cat missing_version_tag.txt)
echo "MISSING_VERSION_TAG=$MISSING_VERSION_TAG"
MISSING_VERSION_UPDATE=$(cat missing_version_update.txt)
echo "--"
echo "MISSING_VERSION_UPDATE=$MISSING_VERSION_UPDATE"
echo "--"
UPDATED_CONTRACTS=$(cat updated_contracts.txt)
echo "UPDATED_CONTRACTS=$UPDATED_CONTRACTS"
echo "-----------------------------------"
# Initialize PR title
PR_TITLE_UPDATED="$PR_TITLE"
# Check if each target string is in the PR title
IFS=',' read -ra UPDATED_ARRAY <<< "$UPDATED_CONTRACTS"
for TARGET_STRING in "${UPDATED_ARRAY[@]}"; do
if [[ "$PR_TITLE_UPDATED" =~ "$TARGET_STRING" ]]; then
echo "PR title contains target string ($TARGET_STRING)"
else
echo "PR title does not contain target string ($TARGET_STRING)"
PR_TITLE_UPDATED="$PR_TITLE_UPDATED ($TARGET_STRING)"
fi
done
echo "Final PR Title: $PR_TITLE_UPDATED"
echo "PR_TITLE=$PR_TITLE_UPDATED" >> $GITHUB_ENV
# - name: Update the PR title on GitHub
# uses: actions/github-script@v5
# with:
# script: |
# const { execSync } = require('child_process');
# const prTitle = process.env.PR_TITLE;
# github.rest.pulls.update({
# owner: context.repo.owner,
# repo: context.repo.repo,
# pull_number: context.issue.number,
# title: prTitle
# });