Skip to content

Commit

Permalink
Merge pull request #82 from HerodotusDev/chore/ci-refinements
Browse files Browse the repository at this point in the history
Chore/ci refinements
  • Loading branch information
petscheit authored Sep 4, 2024
2 parents 1b3a9a7 + bf3fe46 commit 159cda2
Show file tree
Hide file tree
Showing 5 changed files with 185 additions and 11 deletions.
6 changes: 6 additions & 0 deletions .bumpversion.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[bumpversion]
current_version = 0.0.7
commit = True
tag = True

[bumpversion:file:version.py]
125 changes: 125 additions & 0 deletions .github/workflows/add-to-registry.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: Add compile program to registry
on:
push:
branches:
- main

jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Setup Scarb
uses: software-mansion/setup-scarb@v1

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'

- name: Cache Python environment
uses: actions/cache@v3
with:
path: |
~/.cache/pip
venv
key: ${{ runner.os }}-python-${{ hashFiles('**/requirements.txt') }}-${{ hashFiles('tools/make/setup.sh') }}
restore-keys: |
${{ runner.os }}-python-${{ hashFiles('**/requirements.txt') }}-${{ hashFiles('tools/make/setup.sh') }}
${{ runner.os }}-python-
- name: Install Dependencies
run: make setup
- name: Compile Cairo program
run: |
source venv/bin/activate
mkdir -p build
# Function to pad hash to 32 bytes
pad_hash() {
# Remove 0x prefix if present
hash=${1#0x}
# Pad to 64 characters (32 bytes)
printf "0x%064s" "$hash" | tr ' ' '0'
}
# First program (frequently updated)
cairo-compile --cairo_path="packages/eth_essentials" "src/hdp.cairo" --output build/hdp.json
HDP_HASH=$(cairo-hash-program --program build/hdp.json)
HDP_HASH=$(pad_hash $HDP_HASH)
echo "HDP_HASH=$HDP_HASH" >> $GITHUB_ENV
# Second program (infrequently updated)
cairo-compile --cairo_path="packages/eth_essentials" "src/contract_dry_run.cairo" --output build/contract_dry_run.json
CONTRACT_DRY_RUN_HASH=$(cairo-hash-program --program build/contract_dry_run.json)
CONTRACT_DRY_RUN_HASH=$(pad_hash $CONTRACT_DRY_RUN_HASH)
echo "CONTRACT_DRY_RUN_HASH=$CONTRACT_DRY_RUN_HASH" >> $GITHUB_ENV
- name: Checkout compilation storage repo
uses: actions/checkout@v2
with:
repository: petscheit/cairo-program-registry-new
token: ${{ secrets.CAIRO_PROGRAM_REGISTRY_PAT }}
path: cairo-compilations

- name: Store compilations and update changelog
run: |
cd cairo-compilations
# Check if first program (HDP) already exists
HDP_UPDATED=false
if [ ! -d "${{ env.HDP_HASH }}" ]; then
mkdir -p ${{ env.HDP_HASH }}
cp ../build/hdp.json ${{ env.HDP_HASH }}/program.json
HDP_UPDATED=true
fi
# Store second program (only if folder doesn't exist)
CONTRACT_DRY_RUN_UPDATED=false
if [ ! -d "${{ env.CONTRACT_DRY_RUN_HASH }}" ]; then
mkdir -p ${{ env.CONTRACT_DRY_RUN_HASH }}
cp ../build/contract_dry_run.json ${{ env.CONTRACT_DRY_RUN_HASH }}/program.json
CONTRACT_DRY_RUN_UPDATED=true
fi
# Update README with changelog only if there are updates
if [ "$HDP_UPDATED" = true ] || [ "$CONTRACT_DRY_RUN_UPDATED" = true ]; then
DATE=$(date +"%Y-%m-%d")
COMMIT_URL="https://github.com/${{ github.repository }}/commit/${{ github.sha }}"
if [ ! -f README.md ]; then
echo "# Changelog" > README.md
echo "" >> README.md
fi
{
echo "## Updates on $DATE"
echo ""
if [ "$HDP_UPDATED" = true ]; then
echo "### HDP Program"
echo "- **Hash:** \`${{ env.HDP_HASH }}\`"
echo "- [View commit]($COMMIT_URL)"
echo ""
fi
if [ "$CONTRACT_DRY_RUN_UPDATED" = true ]; then
echo "### Contract Dry Run"
echo "- **Hash:** \`${{ env.CONTRACT_DRY_RUN_HASH }}\`"
echo "- [View commit]($COMMIT_URL)"
echo ""
fi
echo "$(cat README.md)"
} > README.md.tmp
mv README.md.tmp README.md
# Commit and push if there are changes
git config user.name github-actions
git config user.email [email protected]
git add .
git commit -m "Add compilation(s) for hash(es) ${{ env.HDP_HASH }} and/or ${{ env.CONTRACT_DRY_RUN_HASH }} and update changelog"
git push
else
echo "No new compilations to store or changelog updates."
fi
55 changes: 47 additions & 8 deletions .github/workflows/merge.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
name: Build, Push Docker Image, and Deploy Python Package
name: Build Docker and Push Python Package

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
contents: write
id-token: write
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0 # Fetch all history and tags

- name: Fetch all branches
run: |
git fetch --all
git fetch --tags
- name: Log in to Docker Hub
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
Expand Down Expand Up @@ -61,19 +65,54 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine
pip install setuptools wheel twine bumpversion
- name: Check for package changes
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
# Fetch base branch to compare with PR branch
git fetch origin ${{ github.base_ref }}:${{ github.base_ref }}
CHANGED_FILES=$(git diff --name-only ${{ github.base_ref }}...HEAD)
else
# Compare current commit with the previous commit
CHANGED_FILES=$(git diff --name-only HEAD^ HEAD)
fi
echo "Changed files: $CHANGED_FILES"
if echo "$CHANGED_FILES" | grep -qE '(tools/|contract_bootloader/|compiled_contracts/|setup.py)'; then
echo "CHANGES_DETECTED=true" >> $GITHUB_ENV
else
echo "CHANGES_DETECTED=false" >> $GITHUB_ENV
fi
echo "Changes detected: $CHANGES_DETECTED"
- name: Debug output
run: |
echo "Event name: ${{ github.event_name }}"
echo "GitHub ref: ${{ github.ref }}"
echo "Changes detected: ${{ env.CHANGES_DETECTED }}"
- name: Bump version
if: env.CHANGES_DETECTED == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main'
run: |
git config --local user.email "[email protected]"
git config --local user.name "GitHub Action"
bumpversion patch --allow-dirty
git push --tags
git push
- name: Build Python package
if: steps.check_changes.outputs.changes_detected == 'true'
run: |
python setup.py sdist bdist_wheel
- name: Check PyPI package (dry run)
if: steps.check_changes.outputs.changes_detected == 'true'
run: |
twine check dist/*
echo "Package check completed. In a real publish, the package would be uploaded to PyPI."
- name: Publish package to PyPI
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
if: steps.check_changes.outputs.changes_detected == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/main'
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_API_TOKEN }}
password: ${{ secrets.PYPI_API_TOKEN }}
9 changes: 6 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
from setuptools import setup
from setuptools.command.install import install

from pathlib import Path

# Read version from version.py
version = {}
with open("version.py") as fp:
exec(fp.read(), version)

this_directory = Path(__file__).parent
long_description = (this_directory / "package.md").read_text()

Expand All @@ -11,7 +15,6 @@ class PostInstallCommand(install):
"""Custom post-installation for installation mode."""

def run(self):
# Run the standard install process first
install.run(self)


Expand All @@ -23,7 +26,7 @@ def run(self):
name="hdp-cairo-dev",
long_description=long_description,
long_description_content_type="text/markdown",
version="0.0.7",
version=version["__version__"],
packages=[
"tools",
"contract_bootloader",
Expand Down
1 change: 1 addition & 0 deletions version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__version__ = "0.0.7"

0 comments on commit 159cda2

Please sign in to comment.