diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 73188c3c5..7bc009862 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -75,5 +75,25 @@ jobs:
file: ./coverage.xml
yml: ./codecov.yml
# Disabled this line because Codecov has been extra flaky lately, and having to re-run the entire
-# test suite until every coverage upload step succeeds is more of a hassle than it's worth.
+# test suite until every coverage upload step succeeds is more of a hassle than it's worth.
# fail_ci_if_error: true
+ upload:
+ runs-on: ubuntu-latest
+ if: github.event_name == 'schedule'
+ needs: tests
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up Python 3.6
+ uses: actions/setup-python@v1
+ with:
+ python-version: 3.6
+ - name: Build Dist
+ run: |
+ python3 -m pip install wheel
+ python3 setup.py --dev_release sdist bdist_wheel
+ - name: Upload to PyPI
+ uses: pypa/gh-action-pypi-publish@v1.2.2
+ with:
+ password: ${{ secrets.PYPI_UPLOAD }}
+
+
diff --git a/README.md b/README.md
index bc65bb997..15e92ad20 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Manticore
-
+
@@ -46,7 +46,13 @@ Option 2: Installing from PyPI, with extra dependencies needed to execute native
pip install "manticore[native]"
```
-Option 3: Installing from the `master` branch:
+Option 3: Installing a nightly development build (fill in the latest version from [the PyPI history](https://pypi.org/project/manticore/#history)):
+
+```bash
+pip install "manticore[native]==0.x.x.devYYMMDD"
+```
+
+Option 4: Installing from the `master` branch:
```bash
git clone https://github.com/trailofbits/manticore.git
@@ -54,7 +60,7 @@ cd manticore
pip install -e ".[native]"
```
-Option 4: Install via Docker:
+Option 5: Install via Docker:
```bash
docker pull trailofbits/manticore
@@ -216,9 +222,9 @@ for idx, val_list in enumerate(m.collect_returns()):
* We're still in the process of implementing full support for the EVM Istanbul instruction semantics, so certain opcodes may not be supported.
In a pinch, you can try compiling with Solidity 0.4.x to avoid generating those instructions.
-## Using a different solverr (Z3, Yices, CVC4)
-Manticore relies on an external solver supporting smtlib2. Curently Z3, Yices and CVC4 are supported and can be selected via commandline or configuration settings.
-By default Manticore will use Z3. Once you installed a different solver you can choose a different solver like this:
+## Using a different solver (Z3, Yices, CVC4)
+Manticore relies on an external solver supporting smtlib2. Currently Z3, Yices and CVC4 are supported and can be selected via commandline or configuration settings.
+By default Manticore will use Z3. Once you've installed a different solver, you can choose which one to use like this:
```manticore --smt.solver yices```
### Installing CVC4
For more details go to https://cvc4.github.io/. Otherwise just get the binary and use it.
diff --git a/setup.py b/setup.py
index b644c87a2..a5076da94 100644
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,7 @@
import os
+import sys
from setuptools import setup, find_packages
+from datetime import date
on_rtd = os.environ.get("READTHEDOCS") == "True"
@@ -41,14 +43,21 @@ def rtd_dependent_deps():
with open(os.path.join(this_directory, "README.md"), encoding="utf-8") as f:
long_description = f.read()
+
+# https://stackoverflow.com/a/4792601 grumble grumble
+dev_extension = ""
+if "--dev_release" in sys.argv:
+ dev_extension = ".dev" + date.today().strftime("%y%m%d")
+ sys.argv.remove("--dev_release")
+
setup(
name="manticore",
description="Manticore is a symbolic execution tool for analysis of binaries and smart contracts.",
- long_description=long_description,
long_description_content_type="text/markdown",
+ long_description=long_description,
url="https://github.com/trailofbits/manticore",
author="Trail of Bits",
- version="0.3.4",
+ version="0.3.4" + dev_extension,
packages=find_packages(exclude=["tests", "tests.*"]),
python_requires=">=3.6",
install_requires=[