Merge branch 'main' of github.com:lifinance/contracts into fixTypesAc… #2477
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: Types Bindings | |
on: | |
push: | |
env: | |
BRANCH_NAME: ${{ github.head_ref || github.ref_name }} | |
jobs: | |
generate-tag: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write # Needed to push new tags | |
steps: | |
# Step 1: Checkout the contracts repository | |
- name: Checkout Contracts Repository | |
uses: actions/checkout@v4.1.7 | |
with: | |
ref: ${{ env.BRANCH_NAME }} | |
# Step 2: Install Foundry | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
# Step 3: Install Solidity Libraries | |
- name: Install Solidity Libraries | |
run: forge install | |
# Step 4: Setup Node.js | |
- name: Setup Node.js | |
uses: actions/setup-node@v4.1.0 | |
with: | |
node-version: 20 | |
# Step 5: Install Node.js dependencies | |
- name: Install Node Dependencies | |
run: yarn install | |
# Step 6: Generate ABI from contracts | |
- name: Generate ABI | |
run: yarn abi:generate | |
# Step 7: Generate TypeScript bindings from ABI | |
- name: Generate TypeScript Bindings | |
run: yarn typechain | |
# Step 8: Checkout the lifi-contract-types repository | |
- name: Checkout lifi-contract-types Repository | |
uses: actions/checkout@v4.1.7 | |
with: | |
repository: lifinance/lifi-contract-types | |
path: lifi-contract-types | |
ssh-key: ${{ secrets.SSH_REPO_TOKEN }} | |
ref: main | |
# Step 9: Copy generated types and ABI into the lifi-contract-types repo | |
- name: Copy Type Bindings and ABI | |
run: | | |
rm -rf lifi-contract-types/src/ | |
mkdir -p lifi-contract-types/src | |
cp -r typechain/* lifi-contract-types/src/ | |
cp diamond.json lifi-contract-types/dist/ | |
- name: Verify File Status (for debugging) | |
run: | | |
cd lifi-contract-types | |
git status | |
# Step 10: Build the lifi-contract-types project | |
- name: Build Contract Types | |
run: cd lifi-contract-types && yarn install && yarn build | |
# Step 11: Retrieve the latest tag from the repository | |
- name: Retrieve Latest Tag | |
id: latest_release | |
run: | | |
# Fetch tags from the lifi-contract-types repository | |
RELEASE_JSON=$(curl https://api.github.com/repos/lifinance/lifi-contract-types/tags) | |
# Extract the latest tag name | |
LATEST_TAG=$(echo "$RELEASE_JSON" | jq -r '.[0].name') | |
# Handle beta versions for non-main branches | |
if [[ "$BRANCH_NAME" != "main" ]]; then | |
if [[ "$LATEST_TAG" != *"beta"* ]]; then | |
while read ITEM; do | |
TAG_NAME=$(jq -r '.name' <<< "$ITEM") | |
if [[ "$TAG_NAME" == "$LATEST_TAG-$beta"* ]]; then | |
LATEST_TAG=$TAG_NAME | |
break | |
fi | |
done <<<$(echo "$RELEASE_JSON" | jq -c -r '.[]') | |
fi | |
fi | |
# Check if LATEST_TAG is empty or null | |
if [[ -z "$LATEST_TAG" || "$LATEST_TAG" == "null" ]]; then | |
echo "ERROR: No latest tag found in the repository." | |
exit 1 | |
fi | |
# Validate semver format | |
if [[ ! "$LATEST_TAG" =~ ^v?[0-9]+\.[0-9]+\.[0-9]+(-beta)?$ ]]; then | |
echo "ERROR: Invalid version format: $LATEST_TAG (not a valid semver format)" | |
exit 1 | |
fi | |
echo "LATEST_TAG=$LATEST_TAG" | |
echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV | |
# Step 12: Increment the version number based on the commit message and branch | |
- name: Update Version | |
if: ${{ success() }} | |
env: | |
LATEST_TAG: ${{ env.LATEST_TAG }} | |
BRANCH_NAME: ${{ env.BRANCH_NAME }} | |
MESSAGE: ${{ github.event.head_commit.message }} | |
id: bump_version | |
run: | | |
# Remove leading "v" from LATEST_TAG for semver parsing | |
CURRENT_VERSION="${LATEST_TAG#v}" | |
echo "Current version: $CURRENT_VERSION" | |
VERSION_FRAGMENT="" | |
# Determine the type of version bump | |
if [[ "$BRANCH_NAME" == "main" ]]; then | |
if [[ "$MESSAGE" =~ "major" ]]; then | |
VERSION_FRAGMENT="major" | |
elif [[ "$MESSAGE" =~ "feat" ]]; then | |
VERSION_FRAGMENT="minor" | |
else | |
VERSION_FRAGMENT="patch" | |
fi | |
else | |
VERSION_FRAGMENT="beta" | |
fi | |
# Parse and increment the version | |
IFS='.' read -r MAJOR MINOR PATCH <<< "${CURRENT_VERSION//[^0-9.]/}" | |
if [[ "$VERSION_FRAGMENT" == "major" ]]; then | |
MAJOR=$((MAJOR + 1)) | |
MINOR=0 | |
PATCH=0 | |
elif [[ "$VERSION_FRAGMENT" == "minor" ]]; then | |
MINOR=$((MINOR + 1)) | |
PATCH=0 | |
elif [[ "$VERSION_FRAGMENT" == "patch" ]]; then | |
PATCH=$((PATCH + 1)) | |
elif [[ "$VERSION_FRAGMENT" == "beta" ]]; then | |
PATCH=$((PATCH + 1)) | |
NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}-beta" | |
else | |
NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}" | |
fi | |
echo "New version: $NEW_VERSION" | |
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV | |
# Step 13: Push the updated version tag to the repository | |
- name: Push Updated Tag | |
if: ${{ success() }} | |
env: | |
NEW_VERSION: ${{ env.NEW_VERSION }} | |
BRANCH_NAME: ${{ env.BRANCH_NAME }} | |
MESSAGE: ${{ github.event.head_commit.message }} | |
run: | | |
cd lifi-contract-types | |
TMP=$(mktemp) | |
jq '.version="${NEW_VERSION}"' package.json > "$TMP" && mv "$TMP" package.json | |
git config user.name github-actions | |
git config user.email github-actions@github.com | |
echo "Updating version from $LATEST_TAG to $NEW_VERSION" | |
# git add src/* | |
# git add dist/* | |
# git add package.json | |
git add -A # Stage all changes, including deletions | |
git commit -m "actions: new contracts version $NEW_VERSION" | |
# Annotate and push the new tag | |
git tag -a "v$NEW_VERSION" -m "$MESSAGE" | |
git push origin tag "v$NEW_VERSION" | |
if [[ "$BRANCH_NAME" == "main" ]]; then | |
git push -u origin $BRANCH_NAME | |
fi |