diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index ba05739..8d37192 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -30,6 +30,7 @@ jobs: shell: bash run: | pip install -r requirements.txt + python setup.py sdist python setup.py bdist_wheel --py-limited-api=cp37 pip install --force-reinstall dist/*.whl python -c "import icicle" @@ -97,7 +98,7 @@ jobs: linux: # Skip building pull requests from the same repository if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }} - runs-on: macos-latest + runs-on: ubuntu-latest env: # Disable output buffering in an attempt to get readable errors PYTHONUNBUFFERED: '1' @@ -138,34 +139,29 @@ jobs: path: dist release: - if: ${{ startsWith(github.ref, 'refs/tags/v') }} + if: ${{ startsWith(github.ref, 'refs/tags/') }} runs-on: ubuntu-latest - needs: - - windows - - macos - - linux + needs: [windows, macos, linux] + permissions: + contents: write + discussions: write steps: - - uses: actions/download-artifact@v3 + - name: Download wheels + uses: actions/download-artifact@v3 with: name: wheels - - - name: Python environment - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - - name: Source distribution - run: | - python setup.py sdist + path: dist - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@b7f401de30cb6434a1e19f805ff006643653240e # v1.8.10 with: password: ${{ secrets.PYPI_API_TOKEN }} + packages-dir: dist/ - name: Release uses: softprops/action-gh-release@c9b46fe7aad9f02afd89b12450b780f52dacfb2d # master 2023-03-26 with: generate_release_notes: true + files: dist/* env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/Cargo.lock b/Cargo.lock index 387e20d..813a77b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -351,7 +351,7 @@ dependencies = [ [[package]] name = "icicle-python" -version = "0.1.0" +version = "0.0.1" dependencies = [ "icicle-cpu", "icicle-vm", diff --git a/Cargo.toml b/Cargo.toml index 1308565..e86f9de 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ [package] name = "icicle-python" -version = "0.1.0" +version = "0.0.1" edition = "2021" [lib] diff --git a/MANIFEST.in b/MANIFEST.in index 2bbea80..89caa0c 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,12 +1,9 @@ include Cargo.lock include Cargo.toml -include README.md include build.rs include requirements.txt include copy-ghidra.py recursive-include src * recursive-include icicle-emu * -recursive-include python *.py -recursive-include python *.pyi -recursive-include python py.typed -recursive-include python/icicle/Ghidra * \ No newline at end of file +recursive-include python/icicle/Ghidra * +recursive-include tests * \ No newline at end of file diff --git a/README.md b/README.md index 73be4eb..3141b5a 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,17 @@ This project is an easy to use Python wrapper around [icicle-emu](https://github.com/icicle-emu/icicle-emu). You can read more about Icicle in the paper: [Icicle: A Re-designed Emulator for Grey-Box Firmware Fuzzing](https://arxiv.org/pdf/2301.13346.pdf) -## Requirements +## Installation -- [Python 3.7+](https://www.python.org/downloads/) -- [Rust 1.48](https://rustup.rs/) +You can install the [latest release](https://github.com/mrexodia/icicle-python/releases) from [PyPI](https://pypi.org/project/icicle-emu): -## Building +``` +pip -m install icicle-emu +``` -TODO: talk about the submodule +## Development -TODO: clone ghidra and set `GHIDRA_SRC` environment variable +_Note_: You need to install [Rust 1.48](https://rustup.rs) or later to build from source. Set up a virtual environment: @@ -27,5 +28,5 @@ Get the dependencies and build: ```shell pip install -r requirements.txt -maturin develop -``` \ No newline at end of file +python setup.py develop +``` diff --git a/setup.cfg b/setup.cfg index 1839dc0..8b81863 100644 --- a/setup.cfg +++ b/setup.cfg @@ -27,4 +27,7 @@ package_dir = zip_safe = False setup_requires = setuptools-rust >= 0.12.1; python_requires = >=3.7 -include_package_data = True \ No newline at end of file + +# Reference: https://stackoverflow.com/a/64789489/1806760 +[options.package_data] +icicle = Ghidra/**/* \ No newline at end of file diff --git a/setup.py b/setup.py index 434e239..064f794 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ raise FileNotFoundError(f"Rust not found, visit https://rustup.rs for installation instructions") ref_name = getenv("GITHUB_REF_NAME") - if ref_name: + if getenv("GITHUB_REF", "").startswith("refs/tags/") and ref_name: from pkg_resources import parse_version try: parse_version(ref_name)