EcoAssist v5.22 #4
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
name: Build macOS release | |
on: | |
workflow_dispatch: | |
release: | |
types: | |
- published | |
jobs: | |
build-macos-release: | |
runs-on: macos-15 | |
env: | |
RELEASE_VERSION: ${{ github.event.release.tag_name }} | |
BUCKET_NAME: github-release-files-storage | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
# - name: Debug dependencies | |
# run: | | |
# root="$HOME/EcoAssist" | |
# mkdir -p "${root}" | |
# git clone --depth 1 https://github.com/PetervanLunteren/visualise_detection.git "${root}/visualise_detection" | |
- name: Install Miniconda | |
run: | | |
mkdir "$HOME/miniforge" | |
curl -L "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh" -o miniforge.sh | |
bash miniforge.sh -b -u -p "$HOME/miniforge" | |
echo "succesfully installed at $HOME/miniforge" | |
- name: Install dependencies | |
run: | | |
### refresh root | |
root="$HOME/EcoAssist" | |
if [ -d "${root}" ]; then | |
rm -rf "${root}" | |
echo "$root folder removed" | |
else | |
echo "$root folder does not exist" | |
fi | |
### create folder structure | |
mkdir -p "${root}" | |
mkdir -p "${root}/envs" | |
mkdir -p "${root}/models" | |
mkdir -p "${root}/models/det" | |
mkdir -p "${root}/models/cls" | |
mkdir -p "${root}/models/det/MegaDetector 5a" | |
mkdir -p "${root}/yolov5_versions/yolov5_old" | |
mkdir -p "${root}/yolov5_versions/yolov5_new" | |
echo "Hello world!" >> "${root}/first-startup.txt" | |
## clone repositories | |
git clone --depth 1 https://github.com/PetervanLunteren/EcoAssist.git "${root}/EcoAssist" | |
rm -rf "${root}/EcoAssist/.git" | |
mv "${root}/EcoAssist/main.py" "${root}/main.py" | |
RAW_VERSION=${{ env.RELEASE_VERSION }} | |
CLEAN_VERSION="${RAW_VERSION#v}" | |
echo "$CLEAN_VERSION" > "${root}/EcoAssist/version.txt" | |
echo "EcoAssist cloned" | |
git clone https://github.com/agentmorris/MegaDetector.git "${root}/MegaDetector" | |
git -C "${root}/MegaDetector" checkout e8a4fc19a2b9ad1892dd9ce65d437252df271576 | |
rm -rf "${root}/MegaDetector/.git" | |
mv "${root}/MegaDetector" "${root}/cameratraps" | |
echo "MegaDetector cloned" | |
git clone https://github.com/ultralytics/yolov5.git "${root}/yolov5_versions/yolov5_old/yolov5" | |
git -C "${root}/yolov5_versions/yolov5_old/yolov5" checkout 868c0e9bbb45b031e7bfd73c6d3983bcce07b9c1 | |
rm -rf "${root}/yolov5_versions/yolov5_old/yolov5/.git" | |
echo "yolov5 old version cloned" | |
git clone https://github.com/ultralytics/yolov5.git "${root}/yolov5_versions/yolov5_new/yolov5" | |
git -C "${root}/yolov5_versions/yolov5_new/yolov5" checkout 3e55763d45f9c5f8217e4dad5ba1e6c1f42e3bf8 | |
rm -rf "${root}/yolov5_versions/yolov5_new/yolov5/.git" | |
echo "yolov5 new version cloned" | |
git clone --branch pyside6 --depth 1 https://github.com/PetervanLunteren/Human-in-the-loop.git "${root}/Human-in-the-loop" | |
rm -rf "${root}/Human-in-the-loop/.git" | |
echo "Human-in-the-loop cloned" | |
git clone --depth 1 https://github.com/PetervanLunteren/visualise_detection.git "${root}/visualise_detection" | |
rm -rf "${root}/visualise_detection/.git" | |
echo "visualise_detection cloned" | |
### download megadetector | |
curl -L https://github.com/agentmorris/MegaDetector/releases/download/v5.0/md_v5a.0.0.pt -o "${root}/models/det/MegaDetector 5a/md_v5a.0.0.pt" | |
### source conda | |
source "$HOME/miniforge/etc/profile.d/conda.sh" | |
source "$HOME/miniforge/bin/activate" | |
conda_exe="$HOME/miniforge/bin/conda" | |
### install mamba | |
$conda_exe install mamba -n base -c conda-forge -y | |
conda_exe="$HOME/miniforge/bin/mamba" | |
### install env-base | |
$conda_exe env create --file="${root}/cameratraps/envs/environment-detector-m1.yml" -p "${root}/envs/env-base" | |
$conda_exe run -p "${root}/envs/env-base" conda install pytorch==1.13.1 torchvision==0.14.1 -c pytorch -y | |
$conda_exe run -p "${root}/envs/env-base" conda uninstall opencv -y | |
$conda_exe run -p "${root}/envs/env-base" pip install opencv-python | |
$conda_exe run -p "${root}/envs/env-base" pip install RangeSlider | |
$conda_exe run -p "${root}/envs/env-base" pip install gpsphoto | |
$conda_exe run -p "${root}/envs/env-base" pip install exifread | |
$conda_exe run -p "${root}/envs/env-base" pip install piexif | |
$conda_exe run -p "${root}/envs/env-base" pip install openpyxl | |
$conda_exe run -p "${root}/envs/env-base" pip install customtkinter | |
$conda_exe run -p "${root}/envs/env-base" pip install CTkTable | |
$conda_exe run -p "${root}/envs/env-base" pip install folium | |
$conda_exe run -p "${root}/envs/env-base" pip install plotly | |
$conda_exe run -p "${root}/envs/env-base" pip install "gitpython>=3.1.30" | |
$conda_exe run -p "${root}/envs/env-base" pip install "tensorboard>=2.4.1" | |
$conda_exe run -p "${root}/envs/env-base" pip install "thop>=0.1.1" | |
$conda_exe run -p "${root}/envs/env-base" pip install "protobuf<=3.20.1" | |
$conda_exe run -p "${root}/envs/env-base" pip install "setuptools>=65.5.1" | |
$conda_exe run -p "${root}/envs/env-base" pip install PySide6 | |
$conda_exe run -p "${root}/envs/env-base" conda install lxml -y | |
"${root}/envs/env-base/bin/pyside6-rcc" -o "${root}/Human-in-the-loop/libs/resources.py" "${root}/Human-in-the-loop/resources.qrc" | |
### install env-tensorflow | |
$conda_exe env create --file="${root}/EcoAssist/classification_utils/envs/tensorflow-macos-silicon.yml" -p "${root}/envs/env-tensorflow" | |
### install env-pytorch | |
$conda_exe create -p "${root}/envs/env-pytorch" python=3.8 -y | |
$conda_exe run -p "${root}/envs/env-pytorch" pip install torch==2.0.1 torchvision==0.15.2 | |
$conda_exe run -p "${root}/envs/env-pytorch" pip install "ultralytics==8.0.191" | |
$conda_exe run -p "${root}/envs/env-pytorch" pip install "numpy==1.24.1" | |
$conda_exe run -p "${root}/envs/env-pytorch" pip install "humanfriendly==10.0" | |
$conda_exe run -p "${root}/envs/env-pytorch" pip install "jsonpickle==3.0.2" | |
$conda_exe run -p "${root}/envs/env-pytorch" pip install timm | |
$conda_exe run -p "${root}/envs/env-pytorch" pip install dill | |
### install env-pywildlife | |
$conda_exe create -p "${root}/envs/env-pywildlife" python=3.8 -y | |
$conda_exe run -p "${root}/envs/env-pywildlife" pip install pytorchwildlife | |
$conda_exe run -p "${root}/envs/env-pywildlife" pip install "setuptools<70" | |
$conda_exe run -p "${root}/envs/env-pywildlife" pip install jsonpickle | |
### run pyinstaller from fresh environment | |
$conda_exe create -p "$HOME/miniforge/envs/env-fresh" python=3.8 pyinstaller -y | |
$conda_exe run -p "$HOME/miniforge/envs/env-fresh" pyinstaller --onefile --windowed --icon="${root}/EcoAssist/imgs/logo_small_bg.icns" --distpath="${HOME}/dist" --workpath="${HOME}/build" "${root}/main.py" | |
### clean | |
$conda_exe clean --all --yes --force-pkgs-dirs | |
$conda_exe clean --all --yes | |
### move and rename executables | |
# cp "${HOME}/dist/main" "${root}/EcoAssist ${RELEASE_VERSION} installer" # installer executable | |
mv "${HOME}/dist/main" "${root}/EcoAssist ${RELEASE_VERSION} debug" # debug executable | |
mv "${HOME}/dist/main.app" "${root}/EcoAssist ${RELEASE_VERSION}.app" # main app executable | |
- name: Zip folder contents | |
run: | | |
cd "$HOME" | |
tar -caf "macos-${{ env.RELEASE_VERSION }}.tar.xz" EcoAssist | |
# - name: Upload files to Google Cloud | |
# run: | | |
# cd "$HOME" | |
# # init vars | |
# BUCKET_NAME="${{ env.BUCKET_NAME }}" | |
# PINNED_FOLDER_NAME="${{ env.RELEASE_VERSION }}" | |
# LATEST_FOLDER_NAME="latest" | |
# PINNED_FILE_NAME="macos-${{ env.RELEASE_VERSION }}.tar.xz" | |
# LATEST_FILE_NAME="macos-latest.tar.xz" | |
# # upload release pinned version | |
# gsutil cp -r $PINNED_FILE_NAME gs://$BUCKET_NAME/$PINNED_FOLDER_NAME/$PINNED_FILE_NAME | |
# - name: Get the release body | |
# id: get_release | |
# run: | | |
# release=$(gh release view ${{ github.ref_name }} --json body -q .body) | |
# echo "$release" > release_body.txt | |
# - name: Append link to release body | |
# id: append_link | |
# run: | | |
# new_body="$(cat release_body.txt) | |
# - Install for **macOS** (Apple Silicon - M1, M2, M3, etc.): [macos-${{ env.RELEASE_VERSION }}.tar.xz](https://storage.googleapis.com/${{ env.BUCKET_NAME }}/${{ env.RELEASE_VERSION }}/macos-${{ env.RELEASE_VERSION }}.tar.xz)" | |
# echo "$new_body" > new_release_body.txt | |
# - name: Update the release body | |
# run: | | |
# gh release edit ${{ github.ref_name }} --notes "$(cat new_release_body.txt)" | |
- name: Install Platypus | |
run: | | |
# copy files into the right directory | |
sudo mkdir -p '/usr/local/share/platypus/' | |
sudo cp "${{ github.workspace }}/install_files/macos/ScriptExec" '/usr/local/share/platypus/' | |
sudo cp "${{ github.workspace }}/install_files/macos/platypus_clt" '/usr/local/share/platypus/' | |
sudo cp -r "${{ github.workspace }}/install_files/macos/MainMenu.nib" '/usr/local/share/platypus/' | |
# make executable | |
sudo chmod +x '/usr/local/share/platypus/ScriptExec' | |
sudo chmod +x '/usr/local/share/platypus/platypus_clt' | |
- name: Append VERSION to Platypus Installer Script | |
shell: bash | |
run: | | |
# Define the file path | |
FILE_PATH="${{ github.workspace }}/install_files/macos/platypus-install-compiler.sh" | |
# Create a new file with the VERSION line | |
echo "VERSION=\"${{ env.RELEASE_VERSION }}\"" > newFile.sh | |
# Append the original file's content | |
cat "$FILE_PATH" >> newFile.sh | |
# Replace the original file with the new file | |
mv newFile.sh "$FILE_PATH" | |
- name: Create Installer | |
run: | | |
sudo '/usr/local/share/platypus/platypus_clt' --app-icon '${{ github.workspace }}/install_files/macos/logo.icns' --name 'EcoAssist-${{ env.RELEASE_VERSION }}-installer' --interface-type 'Progress Bar' --interpreter '/bin/bash' --app-version '${{ env.RELEASE_VERSION }}' '${{ github.workspace }}/install_files/macos/platypus-install-compiler.sh' | |
- name: Compress the macOS installer | |
run: | | |
cd "${{ github.workspace }}/install_files/macos" | |
zip -r "EcoAssist-${{ env.RELEASE_VERSION }}-installer.zip" "EcoAssist-${{ env.RELEASE_VERSION }}-installer.app" | |
- name: Get Upload URL for Release | |
id: get_upload_url | |
uses: actions/github-script@v6 | |
with: | |
script: | | |
const release = await github.rest.repos.getReleaseByTag({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
tag: '${{ env.RELEASE_VERSION }}', | |
}); | |
// Write the upload URL to the environment file | |
const fs = require('fs'); | |
fs.appendFileSync(process.env.GITHUB_ENV, `UPLOAD_URL=${release.data.upload_url}\n`); | |
- name: Authenticate GitHub CLI | |
run: echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token | |
- name: Upload Asset to GitHub Release | |
uses: actions/upload-release-asset@v1 | |
with: | |
upload_url: ${{ env.UPLOAD_URL }} | |
asset_path: "${{ github.workspace }}/install_files/macos/EcoAssist-${{ env.RELEASE_VERSION }}-installer.zip" | |
asset_name: "MacOS-installer-${{ env.RELEASE_VERSION }}.zip" | |
asset_content_type: application/octet-stream | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Authenticate with Google Cloud | |
uses: google-github-actions/auth@v1 | |
with: | |
credentials_json: ${{ secrets.GOOGLE_STORAGE_UPLOAD_KEY }} | |
- name: Set up Google Cloud | |
uses: google-github-actions/setup-gcloud@v1 | |
with: | |
project_id: github-file-storage | |
- name: Upload program files to Google Cloud | |
run: | | |
cd "$HOME" | |
# init vars | |
BUCKET_NAME="${{ env.BUCKET_NAME }}" | |
PINNED_FOLDER_NAME="${{ env.RELEASE_VERSION }}" | |
LATEST_FOLDER_NAME="latest" | |
PINNED_FILE_NAME="macos-${{ env.RELEASE_VERSION }}.tar.xz" | |
LATEST_FILE_NAME="macos-latest.tar.xz" | |
# upload release pinned version | |
gsutil cp -r $PINNED_FILE_NAME gs://$BUCKET_NAME/$PINNED_FOLDER_NAME/$PINNED_FILE_NAME | |
# upload latest release version | |
gsutil cp -r $PINNED_FILE_NAME gs://$BUCKET_NAME/$LATEST_FOLDER_NAME/$LATEST_FILE_NAME | |
- name: Upload installer to Google Cloud | |
run: | | |
cd "${{ github.workspace }}/install_files/macos/" | |
INSTALLER="EcoAssist-${{ env.RELEASE_VERSION }}-installer.zip" | |
gsutil cp -r $INSTALLER gs://${{ env.BUCKET_NAME }}/latest/EcoAssist-latest-installer.zip |