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

CI TESTING #77

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
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 }}/
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 }}/
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 github-actions@github.com
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 "action@github.com"
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 }}
12 changes: 6 additions & 6 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
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()


class PostInstallCommand(install):
"""Custom post-installation for installation mode."""

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


# Read the requirements from the requirements.txt file
with open("tools/make/requirements.txt") as requirements_file:
requirements = requirements_file.read().splitlines()
Expand All @@ -23,7 +23,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
Loading
Loading