Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TT-1434] Solidity Review Artifacts pipeline #14015

Merged
merged 23 commits into from
Aug 9, 2024
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
f9b56c4
try artifact pipeline by hijacking hardhat
Tofel Aug 2, 2024
c4d75f1
Merge branch 'develop' into tt_1325_solidity_pipelines_genhtml
Tofel Aug 5, 2024
3cfe081
restore old Hardhat pipeline
Tofel Aug 5, 2024
88c3d73
Merge branch 'tt_1326_update_Sol_Foundry' into tt_1325_solidity_pipel…
Tofel Aug 5, 2024
f2b7bd7
fix basic info condition, join 2 steps into 1, define higher-level co…
Tofel Aug 6, 2024
76594e1
Merge branch 'tt_1326_update_Sol_Foundry' into tt_1325_solidity_pipel…
Tofel Aug 6, 2024
c2b8b48
update artifact pipeline with new actions
Tofel Aug 6, 2024
b38792b
Merge branch 'develop' into tt_1325_solidity_pipelines_genhtml
Tofel Aug 6, 2024
e05a9b4
fix workflow after tests
Tofel Aug 6, 2024
7d911da
Merge branch 'tt_1326_update_Sol_Foundry' into tt_1325_solidity_pipel…
Tofel Aug 6, 2024
03f48a9
treat shared as any other product
Tofel Aug 7, 2024
7b472a8
small fixes
Tofel Aug 7, 2024
60e548d
Merge branch 'tt_1326_update_Sol_Foundry' into tt_1325_solidity_pipel…
Tofel Aug 7, 2024
8e22de6
use only dorny/paths
Tofel Aug 7, 2024
7b7b9dd
CR changes: use dorny/paths with quantifier, move scope validation to…
Tofel Aug 7, 2024
0928fb9
fix workflow
Tofel Aug 7, 2024
27a5834
Merge branch 'tt_1326_update_Sol_Foundry' into tt_1325_solidity_pipel…
Tofel Aug 7, 2024
7d46431
fail bash scripts on erors
Tofel Aug 8, 2024
df771e3
add set -euo pipefail to bash scripts
Tofel Aug 8, 2024
2034917
Merge branch 'tt_1326_update_Sol_Foundry' into tt_1325_solidity_pipel…
Tofel Aug 8, 2024
a18c5ad
fix select solc version script, better slither report output
Tofel Aug 8, 2024
91fb818
Merge branch 'tt_1326_update_Sol_Foundry' into tt_1325_solidity_pipel…
Tofel Aug 8, 2024
699c541
Merge branch 'tt_1326_update_Sol_Foundry' into tt_1325_solidity_pipel…
Tofel Aug 8, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions .github/actions/validate-artifact-scope/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
name: Validate Artifact Scope
description: Checks there are any modified Solidity files outside of the specified scope. If so, it prints a warning message, but does not fail the workflow.
inputs:
product:
description: The product for which the artifacts are being generated
required: true
sol_files:
description: Comma-separated (CSV) or space-separated (shell) list of Solidity files to check
required: true

runs:
using: composite
steps:
- name: Transform input array
id: transform_input_array
shell: bash
run: |
is_csv_format() {
local input="$1"
if [[ "$input" =~ "," ]]; then
return 0
else
return 1
fi
}

is_space_separated_string() {
local input="$1"
if [[ "$input" =~ ^[^[:space:]]+([[:space:]][^[:space:]]+)*$ ]]; then
return 0
else
return 1
fi
}

array="${{ inputs.sol_files }}"

if is_csv_format "$array"; then
echo "::debug::CSV format detected, nothing to do"
echo "sol_files=$array" >> $GITHUB_OUTPUT
exit 0
fi

if is_space_separated_string "$array"; then
echo "::debug::Space-separated format detected, converting to CSV"
csv_array="${array// /,}"
echo "sol_files=$csv_array" >> $GITHUB_OUTPUT
exit 0
fi

echo "::error::Invalid input format for sol_files. Please provide a comma-separated (CSV) or space-separated (shell) list of Solidity files"
exit 1

- name: Check for changes outside of artifact scope
shell: bash
run: |
echo "::debug::All modified contracts:"
echo "${{ steps.transform_input_array.outputs.sol_files }}" | tr ',' '\n'
if [ "${{ inputs.product }}" = "shared" ]; then
excluded_paths_pattern="!/^contracts\/src\/v0\.8\/interfaces/ && !/^contracts\/src\/v0\.8\/${{ inputs.product }}/ && !/^contracts\/src\/v0\.8\/[^\/]+\.sol$/"
else
excluded_paths_pattern="!/^contracts\/src\/v0\.8\/${{ inputs.product }}/"
fi
echo "::debug::Excluded paths: $excluded_paths_pattern"
unexpected_files=$(echo "${{ steps.transform_input_array.outputs.sol_files }}" | tr ',' '\n' | awk "$excluded_paths_pattern")
missing_files=""
set -e
set -o pipefail
if [[ -n "$unexpected_files" ]]; then
products=()
productsStr=""
IFS=$'\n' read -r -d '' -a files <<< "$unexpected_files" || true
echo "Files: ${files[@]}"

for file in "${files[@]}"; do
missing_files+="$file,"

product=$(echo "$file" | awk -F'src/v0.8/' '{if ($2 ~ /\//) print substr($2, 1, index($2, "/")-1); else print "shared"}')
if [[ ! " ${products[@]} " =~ " ${product} " ]]; then
products+=("$product")
productsStr+="$product, "
fi
done
productsStr=${productsStr%, }

set +e
set +o pipefail

missing_files=$(echo $missing_files | tr ',' '\n')

echo "Error: Found modified contracts outside of the expected scope: ${{ inputs.product }}"
echo "Files:"
echo "$missing_files"
echo "Action required: If you want to generate artifacts for other products ($productsStr) run this workflow again with updated configuration"

echo "# Warning!" >> $GITHUB_STEP_SUMMARY
echo "## Reason: Found modified contracts outside of the expected scope: ${{ inputs.product }}" >> $GITHUB_STEP_SUMMARY
echo "### Files:" >> $GITHUB_STEP_SUMMARY
echo "$missing_files" >> $GITHUB_STEP_SUMMARY
echo "## Action required: If you want to generate artifacts for other products ($productsStr) run this workflow again with updated configuration" >> $GITHUB_STEP_SUMMARY
else
echo "No unexpected files found."
fi
Loading
Loading