BugFix #142
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
# GitHub Action workflow to build and run ShellcodeTester's tests | |
# | |
name: Test Build | |
on: | |
push: | |
branches: [ master ] #change to main | |
paths-ignore: | |
- .gitignore | |
- README.md | |
- LICENSE | |
- TODO | |
- shell_bins/__meta__.py | |
#- .github/workflows/build_and_test.yml | |
- '**.md' | |
pull_request: | |
branches: [ master ] | |
paths-ignore: | |
- .gitignore | |
- README.md | |
- LICENSE | |
- TODO | |
- shell_bins/__meta__.py | |
- .github/workflows/build_and_test.yml | |
- '**.md' | |
jobs: | |
lint: | |
name: Check syntaxs errors and warnings | |
runs-on: ubuntu-latest | |
if: | |
github.event_name == 'push' || github.event.pull_request.head.repo.full_name != | |
github.repository | |
steps: | |
- name: Checkout KnowsMore | |
uses: actions/checkout@v3 | |
- name: Setup Python 3.8 | |
uses: actions/setup-python@v3 | |
with: | |
python-version: 3.8 | |
- name: Install Python dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install flake8 | |
- name: Check syntax errors | |
run: | | |
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics | |
- name: Check PEP8 warnings | |
run: | | |
flake8 . --count --ignore=E1,E2,E3,E501,W291,W293 --exit-zero --max-complexity=65 --max-line-length=127 --statistics | |
get_builds: | |
name: Get last released binaries | |
needs: lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Install dependencies | |
uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: wget curl jq | |
version: 1.0 | |
- name: Get last release version | |
id: download | |
run: | | |
chmod +x ./resources/get_url.sh | |
./resources/get_url.sh | |
- name: Download last release | |
run: | | |
wget -nv -O /tmp/mingw-latest.zip "${{ steps.download.outputs.MINGW_URL }}" | |
wget -nv -O /tmp/binutils.zip "${{ steps.download.outputs.BINUTILS_URL }}" | |
- name: Upload binutils | |
uses: actions/upload-artifact@v4 | |
with: | |
name: binutils.zip | |
path: /tmp/binutils.zip | |
retention-days: 3 | |
build_package: | |
name: Build local package | |
needs: get_builds | |
runs-on: ubuntu-latest | |
if: | |
github.event_name == 'push' || github.event.pull_request.head.repo.full_name != | |
github.repository | |
strategy: | |
fail-fast: false | |
steps: | |
- name: Checkout ShellcodeTester | |
uses: actions/checkout@v3 | |
- name: Setup Python | |
uses: actions/setup-python@v3 | |
with: | |
python-version: "3.9" | |
- name: Install dependencies | |
uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: rpm2cpio wget 7zip | |
version: 1.0 | |
- name: Download arfactory | |
uses: actions/download-artifact@v4 | |
id: download | |
with: | |
name: binutils.zip | |
path: /tmp/ | |
- name: Copy binaries | |
run: | | |
mkdir shell_bins/linux/ | |
mkdir shell_bins/windows/ | |
mkdir shell_bins/macosx/ | |
unzip -o ${{steps.download.outputs.download-path}}/binutils.zip -d ./shell_bins/ | |
[ -d ./shell_bins/shell_bins ] && rsync -av ./shell_bins/shell_bins/* shell_bins/ | |
echo "" > shell_bins/__init__.py | |
echo "" > shell_bins/linux/__init__.py | |
echo "" > shell_bins/windows/__init__.py | |
echo "" > shell_bins/macosx/__init__.py | |
- name: Install Python dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install -r tests/requirements-test.txt | |
- name: Change Package version | |
run: | | |
oldv=$( grep '__version__' shell_libs/__meta__.py | grep -oE '[0-9\.]+') | |
current=$(date '+%Y%m%d%H%M%S') | |
meta=$(cat shell_libs/__meta__.py | sed "s/__version__.*/__version__ = '"${oldv}"-"${current}"'/") | |
echo "$meta" > shell_libs/__meta__.py | |
- name: Install shellcodetester | |
run: | | |
pip install . | |
- name: Build artifact | |
run: | | |
python setup.py sdist | |
- name: Get dist file | |
id: distfile | |
run: | | |
p=$(pwd) | |
file=$(find ${p}/dist/ -name "*.tar.gz" | head -n 1) | |
echo "File: ${file}" | |
[ "W$file" == "W" ] && exit 1 | |
[ ! -f "$file" ] && exit 2 | |
echo "Moving ${file} to ${p}/dist/shellcodetester-latest.tar.gz" | |
mv "${file}" "${p}/dist/shellcodetester-latest.tar.gz" | |
file=$(find ${p}/dist/ -name "*.tar.gz" | head -n 1) | |
echo "New File: ${file}" | |
[ "W$file" == "W" ] && exit 1 | |
[ ! -f "$file" ] && exit 2 | |
name=$(basename "$file") | |
echo "NAME=${name}" >> $GITHUB_OUTPUT | |
echo "DIST_FILE=${file}" >> $GITHUB_OUTPUT | |
- name: Upload dist file | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ShellcodeTester-latest | |
path: ${{ steps.distfile.outputs.DIST_FILE }} | |
retention-days: 3 | |
test: | |
name: Run unit tests | |
needs: build_package | |
runs-on: ${{ matrix.os }} | |
if: | |
github.event_name == 'push' || github.event.pull_request.head.repo.full_name != | |
github.repository | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.9", "3.10", "3.11"] | |
experimental: [false] | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
include: | |
- python-version: "3.11" | |
experimental: true | |
os: ubuntu-latest | |
continue-on-error: ${{ matrix.experimental }} | |
steps: | |
- name: Checkout shellcodetester | |
uses: actions/checkout@v3 | |
- name: Setup Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v3 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Python dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install -r tests/requirements-test.txt | |
- name: Download arfactory | |
uses: actions/download-artifact@v4 | |
id: download | |
with: | |
name: ShellcodeTester-latest | |
path: . | |
- name: Install ShellcodeTester | |
run: | | |
pip install shellcodetester-latest.tar.gz | |
- name: Run unit tests | |
run: | | |
pytest -s tests/tests.py | |
- name: Download arfactory | |
uses: actions/download-artifact@v4 | |
id: download_bin | |
with: | |
name: binutils.zip | |
path: /tmp/ | |
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' | |
- name: Copy binaries | |
run: | | |
mkdir shell_bins/linux/ | |
mkdir shell_bins/windows/ | |
mkdir shell_bins/macosx/ | |
unzip -o ${{steps.download_bin.outputs.download-path}}/binutils.zip -d ./shell_bins/ | |
[ -d ./shell_bins/shell_bins ] && rsync -av ./shell_bins/shell_bins/* shell_bins/ | |
echo "" > shell_bins/__init__.py | |
echo "" > shell_bins/linux/__init__.py | |
echo "" > shell_bins/windows/__init__.py | |
echo "" > shell_bins/macosx/__init__.py | |
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' | |
- name: Install CGG Multilib | |
run: | | |
sudo apt update | |
sudo apt-get install -yqq --no-install-recommends gcc-multilib | |
if: matrix.os == 'ubuntu-latest' | |
- name: Run build test (x86) | |
run: | | |
shellcodetester -asm tests/test_x86.asm | |
if: matrix.os == 'ubuntu-latest' | |
- name: Run build test (x86_64) | |
run: | | |
shellcodetester -asm tests/test_x86_64.asm | |
if: matrix.os == 'ubuntu-latest' | |
publish: | |
name: Publish on Test Environment | |
needs: test | |
runs-on: ubuntu-latest | |
if: | |
github.event_name == 'push' || github.event.pull_request.head.repo.full_name != | |
github.repository | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ["3.10"] | |
experimental: [false] | |
continue-on-error: ${{ matrix.experimental }} | |
steps: | |
- name: Checkout ShellcodeTester | |
uses: actions/checkout@v3 | |
- name: Setup Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v3 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
uses: awalsh128/cache-apt-pkgs-action@latest | |
with: | |
packages: rpm2cpio wget 7zip | |
version: 1.0 | |
- name: Download arfactory | |
uses: actions/download-artifact@v4 | |
id: download | |
with: | |
name: binutils.zip | |
path: /tmp/ | |
- name: Copy binaries | |
run: | | |
mkdir shell_bins/linux/ | |
mkdir shell_bins/windows/ | |
mkdir shell_bins/macosx/ | |
unzip -o ${{steps.download.outputs.download-path}}/binutils.zip -d ./shell_bins/ | |
[ -d ./shell_bins/shell_bins ] && rsync -av ./shell_bins/shell_bins/* shell_bins/ | |
echo "" > shell_bins/__init__.py | |
echo "" > shell_bins/linux/__init__.py | |
echo "" > shell_bins/windows/__init__.py | |
echo "" > shell_bins/macosx/__init__.py | |
- name: Install Python dependencies | |
run: | | |
python -m pip install --upgrade pip | |
python -m pip install -r tests/requirements-test.txt | |
- name: Change Package version | |
run: | | |
oldv=$( grep '__version__' shell_libs/__meta__.py | grep -oE '[0-9\.]+') | |
current=$(date '+%Y%m%d%H%M%S') | |
meta=$(cat shell_libs/__meta__.py | sed "s/__version__.*/__version__ = '"${oldv}"-"${current}"'/") | |
echo "$meta" > shell_libs/__meta__.py | |
- name: Install shellcodetester | |
run: | | |
pip install . | |
- name: Build artifact | |
run: | | |
python setup.py sdist | |
- name: Publish package in Test Environment | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
password: ${{ secrets.test_pypi_password }} | |
repository_url: https://test.pypi.org/legacy/ | |
skip_existing: true |