Pickled-Canary CI #12
Workflow file for this run
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
# This CI builds, tests, and (optionally) creates a draft release of PC | |
name: Pickled-Canary CI | |
on: [workflow_dispatch, push, pull_request] | |
permissions: | |
contents: read | |
jobs: | |
# This builds the rust search components for x86 macs | |
build_rust_mac_x86_64: | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Build | |
working-directory: search | |
run: cargo build --release --verbose | |
- name: Archive PC Rust | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pickled_canary_rust_tools_mac_x86_64 | |
path: search/target/release/treesearchtool | |
# This builds and tests the rust search components for Linux and Windows | |
build_rust: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Windows Rust cross compiler | |
working-directory: search | |
run: | | |
sudo apt-get install -yqq gcc-mingw-w64 | |
rustup target add x86_64-pc-windows-gnu | |
rustup component add rust-std-x86_64-pc-windows-gnu | |
- name: Format Rust | |
working-directory: search | |
run: cargo fmt --all -- --color=always --check | |
- name: Check Rust with Clippy | |
working-directory: search | |
run: cargo clippy --workspace -- -D warnings | |
- name: Build | |
working-directory: search | |
run: cargo build --release --verbose | |
- name: Build Windows | |
working-directory: search | |
run: cargo build --release --verbose --target x86_64-pc-windows-gnu | |
- name: Run tests | |
working-directory: search | |
run: cargo test --verbose | |
- name: Prepare PC Rust archive | |
working-directory: search | |
run: | | |
mkdir target/release/binaries | |
mv target/release/treesearchtool target/x86_64-pc-windows-gnu/release/treesearchtool.exe target/release/binaries | |
- name: Archive PC Rust | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pickled_canary_rust_tools | |
path: search/target/release/binaries/* | |
# This builds the Ghidra plugin | |
build: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
include: | |
# - GHIDRA_VERSION: '9.2.2' | |
# GHIDRA_BUILD_DATE: "20201229" | |
# - GHIDRA_VERSION: '9.2.4' | |
# GHIDRA_BUILD_DATE: "20210427" | |
# - GHIDRA_VERSION: "10.0" | |
# GHIDRA_BUILD_DATE: "20210621" | |
# - GHIDRA_VERSION: "10.0.1" | |
# GHIDRA_BUILD_DATE: "20210708" | |
# - GHIDRA_VERSION: "10.0.2" | |
# GHIDRA_BUILD_DATE: "20210804" | |
# - GHIDRA_VERSION: "10.0.3" | |
# GHIDRA_BUILD_DATE: "20210908" | |
# - GHIDRA_VERSION: "10.1" | |
# GHIDRA_BUILD_DATE: "20211210" | |
# - GHIDRA_VERSION: "10.1.1" | |
# GHIDRA_BUILD_DATE: "20211221" | |
# - GHIDRA_VERSION: "10.1.2" | |
# GHIDRA_BUILD_DATE: "20220125" | |
# - GHIDRA_VERSION: "10.1.3" | |
# GHIDRA_BUILD_DATE: "20220421" | |
# - GHIDRA_VERSION: "10.1.4" | |
# GHIDRA_BUILD_DATE: "20220519" | |
# - GHIDRA_VERSION: "10.1.5" | |
# GHIDRA_BUILD_DATE: "20220726" | |
# - GHIDRA_VERSION: "10.2" | |
# GHIDRA_BUILD_DATE: "20221101" | |
# - GHIDRA_VERSION: "10.2.1" | |
# GHIDRA_BUILD_DATE: "20221110" | |
# - GHIDRA_VERSION: "10.2.2" | |
# GHIDRA_BUILD_DATE: "20221115" | |
# - GHIDRA_VERSION: "10.2.3" | |
# GHIDRA_BUILD_DATE: "20230208" | |
# - GHIDRA_VERSION: "10.3" | |
# GHIDRA_BUILD_DATE: "20230510" | |
# - GHIDRA_VERSION: "10.3.1" | |
# GHIDRA_BUILD_DATE: "20230614" | |
# - GHIDRA_VERSION: "10.3.2" | |
# GHIDRA_BUILD_DATE: "20230711" | |
# - GHIDRA_VERSION: "10.3.3" | |
# GHIDRA_BUILD_DATE: "20230829" | |
# - GHIDRA_VERSION: "10.4" | |
# GHIDRA_BUILD_DATE: "20230928" | |
# - GHIDRA_VERSION: "11.0" | |
# GHIDRA_BUILD_DATE: "20231222" | |
- GHIDRA_VERSION: "11.1" | |
GHIDRA_BUILD_DATE: "20240607" | |
GHIDRA_JDK_VERSION: 17 | |
- GHIDRA_VERSION: "11.1.1" | |
GHIDRA_BUILD_DATE: "20240614" | |
GHIDRA_JDK_VERSION: 17 | |
- GHIDRA_VERSION: "11.1.2" | |
GHIDRA_BUILD_DATE: "20240709" | |
GHIDRA_JDK_VERSION: 17 | |
- GHIDRA_VERSION: "11.2" | |
GHIDRA_BUILD_DATE: "20240926" | |
GHIDRA_JDK_VERSION: 21 | |
env: | |
GHIDRA_LABEL: ${{ matrix.GHIDRA_VERSION }}_${{ matrix.GHIDRA_BUILD_DATE }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get latest Ghidra version | |
env: | |
GHIDRA_URL: https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_${{ matrix.GHIDRA_VERSION }}_build/ghidra_${{ matrix.GHIDRA_VERSION }}_PUBLIC_${{ matrix.GHIDRA_BUILD_DATE }}.zip | |
run: | | |
echo "trying ${{ matrix.GHIDRA_VERSION }} on ${{ matrix.GHIDRA_BUILD_DATE }}" | |
mkdir ../Ghidra && wget --no-check-certificate -O ghidra.zip $GHIDRA_URL && unzip ghidra.zip && rm ghidra.zip && mv ghidra* ../Ghidra | |
- name: Set up JDK ${{ matrix.GHIDRA_JDK_VERSION }} | |
uses: actions/setup-java@v4 | |
with: | |
java-version: "${{ matrix.GHIDRA_JDK_VERSION }}" | |
distribution: "temurin" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v3 | |
with: | |
gradle-version: 8.5 | |
- name: Execute Gradle build | |
env: | |
GHIDRA_INSTALL_DIR: ${{ github.workspace }}/../Ghidra/ghidra_${{ matrix.GHIDRA_VERSION }}_PUBLIC | |
run: | | |
gradle build | |
gradle | |
- name: Archive PC Extension | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pickled_canary-${{ env.GHIDRA_LABEL }} | |
path: dist/*.zip | |
# This tests the Ghidra plugin | |
test: | |
runs-on: ubuntu-latest | |
# This is the same strategy as above... would be great to be able to not duplicate it | |
strategy: | |
matrix: | |
include: | |
# - GHIDRA_VERSION: '9.2.2' | |
# GHIDRA_BUILD_DATE: "20201229" | |
# - GHIDRA_VERSION: '9.2.4' | |
# GHIDRA_BUILD_DATE: "20210427" | |
# - GHIDRA_VERSION: "10.0" | |
# GHIDRA_BUILD_DATE: "20210621" | |
# - GHIDRA_VERSION: "10.0.1" | |
# GHIDRA_BUILD_DATE: "20210708" | |
# - GHIDRA_VERSION: "10.0.2" | |
# GHIDRA_BUILD_DATE: "20210804" | |
# - GHIDRA_VERSION: "10.0.3" | |
# GHIDRA_BUILD_DATE: "20210908" | |
# - GHIDRA_VERSION: "10.1" | |
# GHIDRA_BUILD_DATE: "20211210" | |
# - GHIDRA_VERSION: "10.1.1" | |
# GHIDRA_BUILD_DATE: "20211221" | |
# - GHIDRA_VERSION: "10.1.2" | |
# GHIDRA_BUILD_DATE: "20220125" | |
# - GHIDRA_VERSION: "10.1.3" | |
# GHIDRA_BUILD_DATE: "20220421" | |
# - GHIDRA_VERSION: "10.1.4" | |
# GHIDRA_BUILD_DATE: "20220519" | |
# - GHIDRA_VERSION: "10.1.5" | |
# GHIDRA_BUILD_DATE: "20220726" | |
# - GHIDRA_VERSION: "10.2" | |
# GHIDRA_BUILD_DATE: "20221101" | |
# - GHIDRA_VERSION: "10.2.1" | |
# GHIDRA_BUILD_DATE: "20221110" | |
# - GHIDRA_VERSION: "10.2.2" | |
# GHIDRA_BUILD_DATE: "20221115" | |
# - GHIDRA_VERSION: "10.2.3" | |
# GHIDRA_BUILD_DATE: "20230208" | |
# - GHIDRA_VERSION: "10.3" | |
# GHIDRA_BUILD_DATE: "20230510" | |
# - GHIDRA_VERSION: "10.3.1" | |
# GHIDRA_BUILD_DATE: "20230614" | |
# - GHIDRA_VERSION: "10.3.2" | |
# GHIDRA_BUILD_DATE: "20230711" | |
# - GHIDRA_VERSION: "10.3.3" | |
# GHIDRA_BUILD_DATE: "20230829" | |
# - GHIDRA_VERSION: "10.4" | |
# GHIDRA_BUILD_DATE: "20230928" | |
# - GHIDRA_VERSION: "11.0" | |
# GHIDRA_BUILD_DATE: "20231222" | |
- GHIDRA_VERSION: "11.1" | |
GHIDRA_BUILD_DATE: "20240607" | |
GHIDRA_JDK_VERSION: 17 | |
- GHIDRA_VERSION: "11.1.1" | |
GHIDRA_BUILD_DATE: "20240614" | |
GHIDRA_JDK_VERSION: 17 | |
- GHIDRA_VERSION: "11.1.2" | |
GHIDRA_BUILD_DATE: "20240709" | |
GHIDRA_JDK_VERSION: 17 | |
- GHIDRA_VERSION: "11.2" | |
GHIDRA_BUILD_DATE: "20240926" | |
GHIDRA_JDK_VERSION: 21 | |
env: | |
GHIDRA_LABEL: ${{ matrix.GHIDRA_VERSION }}_${{ matrix.GHIDRA_BUILD_DATE }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get latest Ghidra version | |
env: | |
GHIDRA_URL: https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_${{ matrix.GHIDRA_VERSION }}_build/ghidra_${{ matrix.GHIDRA_VERSION }}_PUBLIC_${{ matrix.GHIDRA_BUILD_DATE }}.zip | |
run: | | |
echo "trying ${{ matrix.GHIDRA_VERSION }} on ${{ matrix.GHIDRA_BUILD_DATE }}" | |
mkdir ../Ghidra && wget --no-check-certificate -O ghidra.zip $GHIDRA_URL && unzip ghidra.zip && rm ghidra.zip && mv ghidra* ../Ghidra | |
- name: Set up JDK ${{ matrix.GHIDRA_JDK_VERSION }} | |
uses: actions/setup-java@v4 | |
with: | |
java-version: "${{ matrix.GHIDRA_JDK_VERSION }}" | |
distribution: "temurin" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v3 | |
with: | |
gradle-version: 8.5 | |
- name: Execute Gradle test and coverage | |
env: | |
GHIDRA_INSTALL_DIR: ${{ github.workspace }}/../Ghidra/ghidra_${{ matrix.GHIDRA_VERSION }}_PUBLIC | |
run: gradle test jacocoTestReport | |
- name: Archive Coverage Report | |
uses: actions/upload-artifact@v4 | |
with: | |
name: pickled_canary-${{ env.GHIDRA_LABEL }}_coverage_report | |
path: build/reports/jacoco/test/* | |
build_py: | |
name: Build wheels on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
# macos-13 is an intel runner, macos-14 is apple silicon | |
os: [ubuntu-latest, windows-latest, macos-13, macos-14] | |
needs: [] | |
steps: | |
- uses: actions/checkout@v4 | |
# Used to host cibuildwheel | |
- uses: actions/setup-python@v5 | |
- name: Install cibuildwheel | |
run: python -m pip install cibuildwheel==2.20.0 | |
- name: Build wheels | |
run: cd search && python -m cibuildwheel --output-dir wheelhouse | |
env: | |
CIBW_BEFORE_ALL_LINUX: "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain nightly-x86_64-unknown-linux-gnu -y && source $HOME/.cargo/env && rustup update" | |
CIBW_BEFORE_ALL_WINDOWS: rustup target add i686-pc-windows-msvc | |
CIBW_ENVIRONMENT_LINUX: "PATH=$HOME/.cargo/bin:$PATH" | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: python-wheels-${{ matrix.os }} | |
path: ./search/wheelhouse/*.whl | |
# Bundle up a draft release if the version is tagged | |
release: | |
permissions: write-all | |
runs-on: ubuntu-latest | |
needs: [build, test, build_rust, build_rust_mac_x86_64, build_py] | |
if: startsWith(github.ref, 'refs/tags/') | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Make ouptut directory | |
run: mkdir output_release | |
- name: Download Artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: output_release | |
- name: Make zip | |
run: | | |
cd output_release | |
find . -type d -name 'python-wheels*' -maxdepth 1 -exec zip -r ../\{\}-${{ github.ref_name }}.zip \{\} \; | |
mkdir ../output_release_coverage | |
mv *_coverage_report ../output_release_coverage | |
mv pickled_canary_rust_tools_mac_x86_64/treesearchtool pickled_canary_rust_tools/treesearchtool_mac_x86_64 | |
rmdir pickled_canary_rust_tools_mac_x86_64 | |
zip -r pickled_canary-${{ github.ref_name }}.zip * | |
ls -la | |
cp pickled_canary-${{ github.ref_name }}.zip ../ | |
cd ../output_release_coverage | |
zip -r pickled_canary-coverage_reports-${{ github.ref_name }}.zip * | |
mv pickled_canary-coverage_reports-${{ github.ref_name }}.zip ../ | |
- name: Create Release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: >- | |
gh release create --draft ${{ github.ref_name }} | |
"pickled_canary-${{ github.ref_name }}.zip" | |
"pickled_canary-coverage_reports-${{ github.ref_name }}.zip" | |
python-wheels-* | |
--title "Pickled Canary ${{ github.ref_name}}" |