Skip to content

freecad_bundle

freecad_bundle #438

name: freecad_bundle
on:
schedule:
- cron: "0 23 * * 1,5"
push:
branches:
- "*"
pull_request:
branches:
- master
workflow_dispatch:
jobs:
build-bundles:
runs-on: ${{ matrix.os }}
strategy:
max-parallel: 4
fail-fast: false
matrix:
os: [windows-latest, macos-latest, macos-13, ubuntu-latest]
tag: ["weekly-builds"]
include:
- os: windows-latest
bundle_dir: conda/win
asset_pattern: FreeCAD_.*Windows-x86_64
- os: macos-13
bundle_dir: conda/osx
asset_pattern: FreeCAD_.*macOS-x86_64
- os: macos-latest
bundle_dir: conda/osx
asset_pattern: FreeCAD_.*macOS-arm64
- os: ubuntu-latest
bundle_dir: conda/linux
asset_pattern: FreeCAD_.*Linux-x86_64
steps:
- if: matrix.os == 'windows-latest'
name: msys2
uses: msys2/setup-msys2@v2
- uses: actions/checkout@v4
name: Checkout
- uses: conda-incubator/setup-miniconda@v3
with:
auto-update-conda: true
use-mamba: true
miniforge-variant: Mambaforge
- if: matrix.os == 'ubuntu-latest'
name: update linux
run: |
sudo apt-get update -qq && sudo apt-get install -y desktop-file-utils jq zsync libfuse2;
apt-get download libc6;
dpkg -x libc6*.deb libc6;
curl -LO https://raw.githubusercontent.com/AppImage/AppImages/master/pkg2appimage;
curl -LO https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage;
chmod a+x appimagetool-x86_64.AppImage;
- if: matrix.os != 'windows-latest'
name: install conda dependencies for unix
run: |
mamba env config vars set MAMBA_NO_BANNER=1
mamba install p7zip sed curl -y -c conda-forge;
- if: matrix.os == 'windows-latest'
name: install conda dependencies for windows
run: |
mamba env config vars set MAMBA_NO_BANNER=1
mamba install curl -y -c conda-forge;
- if: matrix.os != 'windows-latest'
name: create unix bundle
run: "bash ./create_bundle.sh"
working-directory: ${{ matrix.bundle_dir}}
env:
DEPLOY_RELEASE: ${{ matrix.tag }}
- if: matrix.os == 'windows-latest'
name: create windows bundle
shell: cmd
run: "call create_bundle.bat"
working-directory: ${{ matrix.bundle_dir}}
env:
DEPLOY_RELEASE: ${{ matrix.tag }}
- if: (github.event_name != 'pull_request')
name: Upload binaries to release and remove old ones
working-directory: ${{ matrix.bundle_dir }}
env:
TARGET_REPO: ${{ github.repository }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEPLOY_RELEASE: ${{ matrix.tag }}
ASSET_PATTERN: ${{ matrix.asset_pattern }}
shell: bash
run: |
# store list of existing assets before upload
# exclude files with the same name as new ones
version_name=$(cat bundle_name.txt)
OLD_ASSETS=$(gh release view -R "$TARGET_REPO" "$DEPLOY_RELEASE" --json assets \
--jq ".assets[].name" | grep "$ASSET_PATTERN" | grep -vF $version_name || true; )
# upload new assets
find . -type f -name "FreeCAD_*" -exec gh release upload --clobber -R "$TARGET_REPO" "$DEPLOY_RELEASE" {} \;
# remove old assets if upload was successful
if [ -n "$OLD_ASSETS" ]; then
while IFS= read -r asset; do
gh release delete-asset -y -R "$TARGET_REPO" "$DEPLOY_RELEASE" "$asset"
done <<< "$OLD_ASSETS"
fi