From 6004697595140ffdcdfb01161b2cb7ca9b4d68e7 Mon Sep 17 00:00:00 2001 From: "Matthew J. Milner" Date: Mon, 16 Dec 2024 03:20:31 +0100 Subject: [PATCH 1/7] Synchronize workflows Signed-off-by: Matthew J. Milner --- .github/workflows/build_cmake.yml | 349 ------------------ .../{flatpak.yml => build_flatpak.yml} | 0 .../{build_qt6.yml => build_linux.yml} | 99 ++--- .../workflows/{build_m1.yml => build_mac.yml} | 78 ++-- .github/workflows/build_windows.yml | 65 ++-- 5 files changed, 156 insertions(+), 435 deletions(-) delete mode 100644 .github/workflows/build_cmake.yml rename .github/workflows/{flatpak.yml => build_flatpak.yml} (100%) rename .github/workflows/{build_qt6.yml => build_linux.yml} (61%) rename .github/workflows/{build_m1.yml => build_mac.yml} (82%) diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml deleted file mode 100644 index 1f65240685..0000000000 --- a/.github/workflows/build_cmake.yml +++ /dev/null @@ -1,349 +0,0 @@ -name: CMake Build Matrix -# Many thanks to Cristian Adam for examples -# e.g. https://github.com/cristianadam/HelloWorld/blob/master/.github/workflows/build_cmake.yml -# https://cristianadam.eu/20191222/using-github-actions-with-c-plus-plus-and-cmake/ - - -on: [push, pull_request, workflow_dispatch] - -env: - QT_VERSION: 5.15.2 - # this is different from MACOSX_DEPLOYMENT_TARGET to prevent build problems - # we set MACOSX_DEPLOYMENT_TARGET later - MACOS_TARGET: 10.12 - FEATURES: -DBUILD_GPL_PLUGINS=ON -DWITH_COORDGEN=OFF -DUSE_VTK=ON -DUSE_3DCONNEXION=ON - CACHE: -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache - SCCACHE_GHA_ENABLED: "true" - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - name: ${{ matrix.config.name }} - runs-on: ${{ matrix.config.os }} - strategy: - fail-fast: false - matrix: - config: - - { - name: "Ubuntu GCC", artifact: "Ubuntu-Latest.tar.gz", - os: ubuntu-latest, - cc: "gcc", cxx: "g++", - build_type: "Release", - cmake_flags: "-G Ninja -DENABLE_TESTING=ON -DTEST_QTGL=OFF -USE_SYSTEM_ZLIB=ON", - cpack: "", - } - - { - name: "Ubuntu AppImage", artifact: "Avogadro2.AppImage", - os: ubuntu-22.04, - cc: "gcc", cxx: "g++", - build_type: "Release", - cmake_flags: "-G Ninja -DBUILD_MOLEQUEUE=OFF -DINSTALL_BUNDLE_FILES=ON -USE_SYSTEM_ZLIB=ON", - cpack: "", - } - - { - name: "macOS Clang", artifact: "macOS.dmg", - os: macos-13, - cc: "clang", cxx: "clang++", - build_type: "Release", - cmake_flags: "-G Ninja -DBUILD_MOLEQUEUE=OFF", - cpack_flags: "-G DragNDrop", - } - - { - name: "Windows Latest MSVC", artifact: "Win64.exe", - os: windows-2019, - cc: "cl", cxx: "cl", - build_type: "Release", - cmake_flags: "-DBUILD_MOLEQUEUE=OFF", - build_flags: "-j 2", - cpack_flags: "-G NSIS", - } - - { - name: "Ubuntu Address Sanitizer", artifact: "", - os: ubuntu-20.04, - cc: "gcc", cxx: "g++", - build_type: "asan", - cmake_flags: "-G Ninja -DENABLE_TESTING=ON -DTEST_QTGL=OFF -USE_SYSTEM_ZLIB=ON", - cpack: "", - } - - { - name: "Ubuntu Undefined Behavior Sanitizer", artifact: "", - os: ubuntu-20.04, - cc: "gcc", cxx: "g++", - build_type: "ubsan", - cmake_flags: "-G Ninja -DENABLE_TESTING=ON -DTEST_QTGL=OFF -USE_SYSTEM_ZLIB=ON", - cpack: "", - } - - steps: - - - name: Install Dependencies (Linux) - if: runner.os == 'Linux' - run: | - sudo add-apt-repository -y universe - sudo apt-get -qq update - sudo apt-get -qq install ninja-build libeigen3-dev libboost-all-dev libglew-dev libxml2-dev - sudo apt-get -qq install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5x11extras5-dev libqt5svg5-dev - sudo apt-get -qq install libgcc-10-dev libgcc-9-dev - sudo apt install libfuse2 - - name: Install Dependencies (macOS) - if: runner.os == 'macOS' - run: | - if uname -p | grep -q "arm" ; then - export PATH=/opt/homebrew/bin:$PATH - else # not self-hosted runner - brew install ninja eigen glew - fi - - name: Install Dependencies (Windows) - if: runner.os == 'Windows' - run: choco install ninja - - - name: Checkout openchemistry - uses: actions/checkout@v4 - with: - repository: openchemistry/openchemistry - submodules: recursive - - - name: Checkout molecules - uses: actions/checkout@v4 - with: - repository: openchemistry/molecules - path: molecules - - - name: Checkout fragments - uses: actions/checkout@v4 - with: - repository: openchemistry/fragments - path: fragments - - - name: Checkout crystals - uses: actions/checkout@v4 - with: - repository: openchemistry/crystals - path: crystals - - - name: Checkout i18n - uses: actions/checkout@v4 - with: - repository: openchemistry/avogadro-i18n - path: avogadro-i18n - - - name: Checkout avogadroapp - uses: actions/checkout@v4 - with: - repository: openchemistry/avogadroapp - path: avogadroapp - fetch-depth: 0 - - - name: Checkout avogadrolibs - uses: actions/checkout@v4 - with: - path: avogadrolibs - fetch-depth: 0 - - - name: Install Qt - uses: jurplel/install-qt-action@v3 - with: - aqtversion: '==3.1.*' - cache: true - version: ${{ env.QT_VERSION }} - - - name: Configure MSVC Command Prompt - if: runner.os == 'Windows' - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: x64 - - - name: Grab cache files - uses: actions/cache@v4 - if: runner.os != 'Windows' - with: - path: | - ${{ runner.workspace }}/build/Downloads - key: ${{ matrix.config.name }}-downloads - - - name: Run sccache-cache - uses: mozilla-actions/sccache-action@main - - - name: Configure - run: | - if [ ! -d "${{ runner.workspace }}/build" ]; then mkdir "${{ runner.workspace }}/build"; fi - cd "${{ runner.workspace }}/build" - # won't have any effect except on Mac - echo "MACOSX_DEPLOYMENT_TARGET=${{ env.MACOS_TARGET }}" >> $GITHUB_ENV - CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake $GITHUB_WORKSPACE ${{env.FEATURES}} ${{env.CACHE}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} - shell: bash - - - name: Build - run: | - CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} CMAKE_C_COMPILER_LAUNCHER=sccache CMAKE_CXX_COMPILER_LAUNCHER=sccache cmake --build . --config ${{matrix.config.build_type}} ${{matrix.config.build_flags}} - shell: bash - working-directory: ${{ runner.workspace }}/build - - - name: Fix Mac plugins - if: runner.os == 'macOS' - working-directory: ${{ runner.workspace }}/build/prefix/lib/openbabel - run: | - for plugin in *.so; do - for libpath in `otool -L ${plugin} | grep '/Users/runner/work' | awk '{print $1}'`; do - export lib=`echo $libpath | cut -d '/' -f 9`; - echo "Fixing $plugin $lib $libpath" - install_name_tool -change $libpath @executable_path/../Frameworks/$lib $plugin - done - done - cd .. # build/prefix/lib - for plugin in libinchi.?.?.?.dylib libopenbabel.?.?.?.dylib; do - for libpath in `otool -L ${plugin} | grep '/Users/runner/work' | awk '{print $1}'`; do - export lib=`echo $libpath | cut -d '/' -f 9`; - echo "Fixing $plugin $lib $libpath" - install_name_tool -change $libpath @executable_path/../Frameworks/$lib $plugin - done - done - otool -L libinchi.?.?.?.dylib - otool -L libopenbabel.?.?.?.dylib - cp -p libinchi* ../Avogadro2.app/Contents/Frameworks/ - cp -p libopenbabel* ../Avogadro2.app/Contents/Frameworks/ - # finally, fixup the binaries - cd ../bin - for exe in obabel obmm eht_bind genXrdPattern; do - for libpath in `otool -L ${exe} | grep '/Users/runner/work' | awk '{print $1}'`; do - export lib=`echo $libpath | cut -d '/' -f 9`; - echo "Fixing $exe $lib $libpath" - install_name_tool -change $libpath @executable_path/../Frameworks/$lib $exe - done - done - - - name: Run tests - if: matrix.config.os == 'ubuntu-20.04' - shell: cmake -P {0} - run: | - include(ProcessorCount) - ProcessorCount(N) - set(ENV{CTEST_OUTPUT_ON_FAILURE} "ON") - set(ENV{ASAN_OPTIONS} "new_delete_type_mismatch=0") - execute_process( - COMMAND ctest -j ${N} - WORKING_DIRECTORY ${{ runner.workspace }}/build/avogadrolibs - RESULT_VARIABLE result - ) - if (NOT result EQUAL 0) - message(FATAL_ERROR "Running tests failed!") - endif() - - - name: Install the Apple certificate - # From GitHub docs: https://docs.github.com/en/actions/guides/installing-an-apple-certificate-on-macos-runners-for-xcode-development - if: runner.os == 'macOS' - working-directory: ${{ runner.workspace }}/build - env: - BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} - P12_PASSWORD: ${{ secrets.P12_PASSWORD }} - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} - NOTARIZE_USERNAME: ${{ secrets.AC_USERNAME }} - NOTARIZE_PASSWORD: ${{ secrets.AC_PASSWORD }} - CODESIGN_IDENTITY: ${{ secrets.CODESIGN_ID }} - PRODUCT_BUNDLE_IDENTIFIER: cc.avogadro - run: | - # be sure the DMG can be created easily - # https://github.com/actions/runner-images/issues/7522#issuecomment-1556766641 - echo killing...; sudo pkill -9 XProtect >/dev/null || true; - echo waiting...; while pgrep XProtect; do sleep 3; done; - - # create variables - if [ -n "${P12_PASSWORD}" ]; then - CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 - KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db - - # import certificate and provisioning profile from secrets - echo -n "$BUILD_CERTIFICATE_BASE64" | base64 -d -o $CERTIFICATE_PATH - - # create temporary keychain if the cert is non-zero - if [ -s $CERTIFICATE_PATH ]; then - security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - security set-keychain-settings -lut 21600 $KEYCHAIN_PATH - security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH - - # import certificate to keychain - security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH - security list-keychain -d user -s $KEYCHAIN_PATH - - # signing occurs via avogadroapp cpack instructions - fi # certificate exists - fi # password exists - - - name: Create Mac and Windows Packages - if: runner.os == 'Windows' || runner.os == 'macOS' - shell: bash - run: | - if [ -z "${P12_PASSWORD}" ]; then - unset CODESIGN_IDENTITY # to prevent cpack failing when trying to sign - fi - if [ -z "${OPENSSL_ROOT_DIR}" ]; then - unset OPENSSL_ROOT_DIR - fi - [[ ! "${GITHUB_REF}" =~ "tags" ]] && export SNAPSHOT_DATE=`date "+%d-%m-%y"` - cpack ${{ matrix.config.cpack_flags }} - working-directory: ${{ runner.workspace }}/build/avogadroapp - continue-on-error: true - env: - P12_PASSWORD: ${{ secrets.P12_PASSWORD }} - CODESIGN_IDENTITY: ${{ secrets.CODESIGN_ID }} - OPENSSL_ROOT_DIR: ${{ matrix.config.ssl_env }} - - - name: AppImage - if: matrix.config.os == 'ubuntu-22.04' && matrix.config.build_type == 'Release' - shell: bash - run: | - mkdir appdir - mv prefix appdir/usr - - export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:appdir/usr/lib - - wget -c -nv "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" - wget -c -nv "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" - wget -c -nv "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" - chmod a+x *.AppImage - - ./linuxdeploy-x86_64.AppImage -d appdir/usr/share/applications/*.desktop --plugin qt --appdir appdir - # add the custom AppRun - rm appdir/AppRun - cp ../avogadrolibs/avogadrolibs/scripts/AppImage.sh appdir/AppRun - chmod a+x appdir/AppRun - ./appimagetool-x86_64.AppImage appdir - mv Avogadro*.AppImage avogadroapp # for upload - working-directory: ${{ runner.workspace }}/build - - - name: Notarize Mac DMG - if: runner.os == 'macOS' - run: | - # check if we have the password and the username - if [ -n "${NOTARIZE_PASSWORD}" ] && [ -n "${NOTARIZE_USERNAME}" ]; then - codesign -s "$CODESIGN_IDENTITY" --timestamp Avogadro2*.dmg - xcrun notarytool submit Avogadro2*.dmg --apple-id "$NOTARIZE_USERNAME" --team-id "$NOTARIZE_TEAM" --password "$NOTARIZE_PASSWORD" --verbose --wait - xcrun stapler staple -v Avogadro2*.dmg - fi - working-directory: ${{ runner.workspace }}/build/avogadroapp - env: - NOTARIZE_TEAM: ${{ secrets.AC_TEAM }} - NOTARIZE_USERNAME: ${{ secrets.AC_USERNAME }} - NOTARIZE_PASSWORD: ${{ secrets.AC_PASSWORD }} - CODESIGN_IDENTITY: ${{ secrets.CODESIGN_ID }} - continue-on-error: true - - - name: Upload - if: matrix.config.artifact != 0 - id: upload-artifact - uses: actions/upload-artifact@v4 - with: - path: ${{ runner.workspace }}/build/avogadroapp/Avogadro*.* - name: ${{ matrix.config.artifact }} - - - name: Cleanup - if: ${{ always() }} # To ensure this step runs even when earlier steps fail - shell: bash - run: | - ls -la ./ - rm -rf ./* || true - rm -rf ./.??* || true - ls -la ./ diff --git a/.github/workflows/flatpak.yml b/.github/workflows/build_flatpak.yml similarity index 100% rename from .github/workflows/flatpak.yml rename to .github/workflows/build_flatpak.yml diff --git a/.github/workflows/build_qt6.yml b/.github/workflows/build_linux.yml similarity index 61% rename from .github/workflows/build_qt6.yml rename to .github/workflows/build_linux.yml index 8cf14ea6fd..c15dbf612e 100644 --- a/.github/workflows/build_qt6.yml +++ b/.github/workflows/build_linux.yml @@ -1,17 +1,17 @@ -name: Qt6 Build Matrix +name: Linux Build Matrix # Many thanks to Cristian Adam for examples # e.g. https://github.com/cristianadam/HelloWorld/blob/master/.github/workflows/build_cmake.yml # https://cristianadam.eu/20191222/using-github-actions-with-c-plus-plus-and-cmake/ - on: [push, pull_request, workflow_dispatch] env: QT_VERSION: 6.8.1 - # this is different from MACOSX_DEPLOYMENT_TARGET to prevent build problems - # we set MACOSX_DEPLOYMENT_TARGET later - MACOS_TARGET: 12 - FEATURES: -DBUILD_GPL_PLUGINS=ON -DBUILD_MOLEQUEUE=OFF -DWITH_COORDGEN=OFF -DUSE_VTK=ON -DQT_VERSION=6 + FEATURES: -DUSE_VTK=ON -DBUILD_GPL_PLUGINS=ON -DBUILD_MOLEQUEUE=OFF -DWITH_COORDGEN=OFF -DQT_VERSION=6 + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: build: @@ -22,88 +22,101 @@ jobs: matrix: config: - { - name: "Ubuntu Qt6", artifact: "", + name: "Ubuntu", artifact: "ubuntu-x86_64.tar.gz", os: ubuntu-latest, cc: "gcc", cxx: "g++", build_type: "Release", cmake_flags: "-G Ninja", - cpack: "", } - { - name: "Ubuntu Qt6 AppImage", artifact: "", + name: "AppImage", artifact: "Avogadro2.AppImage", os: ubuntu-22.04, cc: "gcc", cxx: "g++", build_type: "Release", cmake_flags: "-G Ninja -DINSTALL_BUNDLE_FILES=ON", - cpack: "", } - { - name: "macOS Qt6", artifact: "", - os: macos-latest, - cc: "clang", cxx: "clang++", - build_type: "Release", - cmake_flags: "-G Ninja -DCMAKE_OSX_ARCHITECTURES='arm64;x86_64'", - cpack_flags: "-G DragNDrop", + name: "Ubuntu Address Sanitizer", artifact: "", + os: ubuntu-latest, + cc: "gcc", cxx: "g++", + build_type: "asan", + cmake_flags: "-G Ninja -DENABLE_TESTING=ON -DTEST_QTGL=OFF -USE_SYSTEM_ZLIB=ON", } - { - name: "Windows Qt6", artifact: "", - os: windows-latest, - cc: "cl", cxx: "cl", - build_type: "Release", - cmake_flags: "", - build_flags: "-j 2", - cpack_flags: "-G NSIS", + name: "Ubuntu Undefined Behavior Sanitizer", artifact: "", + os: ubuntu-latest, + cc: "gcc", cxx: "g++", + build_type: "ubsan", + cmake_flags: "-G Ninja -DENABLE_TESTING=ON -DTEST_QTGL=OFF -USE_SYSTEM_ZLIB=ON", } steps: - - name: Install Dependencies (Linux) - if: runner.os == 'Linux' + - name: Install Dependencies run: | sudo apt-get -qq update sudo apt-get -qq install ninja-build libeigen3-dev libboost-all-dev libglew-dev libxml2-dev - - name: Install Dependencies (macOS) - if: runner.os == 'macOS' - run: | - brew install ninja eigen glew - - name: Install Dependencies (Windows) - if: runner.os == 'Windows' - run: choco install ninja - name: Checkout openchemistry uses: actions/checkout@v4 with: repository: openchemistry/openchemistry submodules: recursive - + path: openchemistry + - name: Checkout avogadroapp uses: actions/checkout@v4 with: repository: openchemistry/avogadroapp - path: avogadroapp - + path: openchemistry/avogadroapp + fetch-depth: 0 + - name: Checkout avogadrolibs uses: actions/checkout@v4 with: - path: avogadrolibs + path: openchemistry/avogadrolibs + fetch-depth: 0 + + - name: Checkout i18n + uses: actions/checkout@v4 + with: + repository: openchemistry/avogadro-i18n + path: openchemistry/avogadro-i18n + + - name: Checkout avogadrogenerators + uses: actions/checkout@v4 + with: + repository: openchemistry/avogenerators + path: openchemistry/avogadrogenerators + + - name: Checkout crystals + uses: actions/checkout@v4 + with: + repository: openchemistry/crystals + path: openchemistry/crystals + + - name: Checkout fragments + uses: actions/checkout@v4 + with: + repository: openchemistry/fragments + path: openchemistry/fragments + + - name: Checkout molecules + uses: actions/checkout@v4 + with: + repository: openchemistry/molecules + path: openchemistry/molecules - name: Install Qt uses: jurplel/install-qt-action@v4 with: version: ${{ env.QT_VERSION }} - - name: Configure MSVC Command Prompt - if: runner.os == 'Windows' - uses: ilammy/msvc-dev-cmd@v1 - with: - arch: x64 - - name: Configure run: | if [ ! -d "${{ runner.workspace }}/build" ]; then mkdir "${{ runner.workspace }}/build"; fi cd "${{ runner.workspace }}/build" # won't have any effect except on Mac - echo "MACOSX_DEPLOYMENT_TARGET=${{ env.MACOS_TARGET }}" >> $GITHUB_ENV CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake $GITHUB_WORKSPACE ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} shell: bash diff --git a/.github/workflows/build_m1.yml b/.github/workflows/build_mac.yml similarity index 82% rename from .github/workflows/build_m1.yml rename to .github/workflows/build_mac.yml index 4218681223..a6eea2482a 100644 --- a/.github/workflows/build_m1.yml +++ b/.github/workflows/build_mac.yml @@ -1,12 +1,13 @@ -name: CMake Self-Hosted +name: macOS Build Matrix -on: [push, pull_request, workflow_dispatch] +on: [push, pull_request] env: # this is different from MACOSX_DEPLOYMENT_TARGET to prevent build problems # we set MACOSX_DEPLOYMENT_TARGET later - MACOS_TARGET: 10.12 - FEATURES: -DUSE_VTK=ON -DBUILD_GPL_PLUGINS=ON -DBUILD_MOLEQUEUE=OFF -DWITH_COORDGEN=OFF -DUSE_3DCONNEXION=ON + MACOS_TARGET: 12 + QT_VERSION: 5.15.2 + FEATURES: -DUSE_VTK=ON -DBUILD_GPL_PLUGINS=ON -DBUILD_MOLEQUEUE=OFF -DWITH_COORDGEN=OFF concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -21,13 +22,32 @@ jobs: matrix: config: - { - name: "macOS ARM", artifact: "macOS-arm64.dmg", + name: "macOS Intel", artifact: "macOS-x86_64.dmg", + os: macos-latest, + cc: "clang", cxx: "clang++", + build_type: "Release", + cmake_flags: "-G Ninja -DCMAKE_OSX_ARCHITECTURES='x86_64'", + cpack_flags: "-G DragNDrop", + } + - { + name: "macOS Apple Silicon", artifact: "macOS-arm64.dmg", os: [self-hosted, macOS], cc: "clang", cxx: "clang++", build_type: "Release", cmake_flags: "-G Ninja -DCMAKE_PREFIX_PATH=/opt/homebrew/Cellar/qt@5/5.15.5_1/lib/cmake/Qt5", cpack_flags: "-G DragNDrop", } + - { + name: "macOS Qt6", artifact: "", + os: macos-latest, + cc: "clang", cxx: "clang++", + build_type: "Release", + cmake_flags: "-G Ninja -DCMAKE_OSX_ARCHITECTURES='arm64;x86_64'", + cpack_flags: "-G DragNDrop", + env: { + QT_VERSION: 6.8.1, + } + } steps: @@ -45,41 +65,57 @@ jobs: with: repository: openchemistry/openchemistry submodules: recursive - + path: openchemistry + - name: Checkout avogadroapp uses: actions/checkout@v4 with: - repository: openchemistry/avogadroapp - path: avogadroapp - - - name: Checkout molecules + path: openchemistry/avogadroapp + fetch-depth: 0 + + - name: Checkout avogadrolibs uses: actions/checkout@v4 with: - repository: openchemistry/molecules - path: molecules + repository: openchemistry/avogadrolibs + path: openchemistry/avogadrolibs + fetch-depth: 0 - - name: Checkout fragments + - name: Checkout i18n uses: actions/checkout@v4 with: - repository: openchemistry/fragments - path: fragments + repository: openchemistry/avogadro-i18n + path: openchemistry/avogadro-i18n + + - name: Checkout avogadrogenerators + uses: actions/checkout@v4 + with: + repository: openchemistry/avogenerators + path: openchemistry/avogadrogenerators - name: Checkout crystals uses: actions/checkout@v4 with: repository: openchemistry/crystals - path: crystals + path: openchemistry/crystals - - name: Checkout avogadrolibs + - name: Checkout fragments uses: actions/checkout@v4 with: - path: avogadrolibs + repository: openchemistry/fragments + path: openchemistry/fragments - - name: Checkout i18n + - name: Checkout molecules uses: actions/checkout@v4 with: - repository: openchemistry/avogadro-i18n - path: avogadro-i18n + repository: openchemistry/molecules + path: openchemistry/molecules + + - name: Install Qt + # Only if not self-hosted + if: runner.name != 'macOS Apple Silicon' + uses: jurplel/install-qt-action@v4 + with: + version: ${{ env.QT_VERSION }} - name: Configure run: | diff --git a/.github/workflows/build_windows.yml b/.github/workflows/build_windows.yml index 380dc79a63..0ccbf81c5c 100644 --- a/.github/workflows/build_windows.yml +++ b/.github/workflows/build_windows.yml @@ -1,4 +1,4 @@ -name: CMake Windows Build +name: Windows Build Matrix # Many thanks to Cristian Adam for examples # e.g. https://github.com/cristianadam/HelloWorld/blob/master/.github/workflows/build_cmake.yml # https://cristianadam.eu/20191222/using-github-actions-with-c-plus-plus-and-cmake/ @@ -7,11 +7,11 @@ name: CMake Windows Build # .. since SignPath requires only a Windows build in the action # .. to successfully sign -on: [push, workflow_dispatch] +on: [push, pull_request] env: QT_VERSION: 5.15.2 - FEATURES: -DBUILD_GPL_PLUGINS=ON -DWITH_COORDGEN=OFF -DUSE_VTK=ON -DUSE_3DCONNEXION=ON + FEATURES: -DUSE_VTK=ON -DBUILD_GPL_PLUGINS=ON -DBUILD_MOLEQUEUE=OFF -DWITH_COORDGEN=OFF concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -26,14 +26,26 @@ jobs: matrix: config: - { - name: "Windows Latest MSVC", artifact: "Win64.exe", + name: "Windows", artifact: "windows-x86_64.exe", os: windows-latest, cc: "cl", cxx: "cl", build_type: "Release", - cmake_flags: "-DBUILD_MOLEQUEUE=OFF", + cmake_flags: "", build_flags: "", cpack_flags: "-G NSIS", } + - { + name: "Windows Qt6", artifact: "", + os: windows-latest, + cc: "cl", cxx: "cl", + build_type: "Release", + cmake_flags: "", + build_flags: "", + cpack_flags: "-G NSIS", + env: { + QT_VERSION: 6.8.1, + } + } steps: @@ -46,44 +58,53 @@ jobs: with: repository: openchemistry/openchemistry submodules: recursive - + path: openchemistry + - name: Checkout avogadroapp uses: actions/checkout@v4 with: - repository: openchemistry/avogadroapp - path: avogadroapp - - - name: Checkout molecules + path: openchemistry/avogadroapp + fetch-depth: 0 + + - name: Checkout avogadrolibs uses: actions/checkout@v4 with: - repository: openchemistry/molecules - path: molecules + repository: openchemistry/avogadrolibs + path: openchemistry/avogadrolibs + fetch-depth: 0 - - name: Checkout fragments + - name: Checkout i18n uses: actions/checkout@v4 with: - repository: openchemistry/fragments - path: fragments + repository: openchemistry/avogadro-i18n + path: openchemistry/avogadro-i18n + + - name: Checkout avogadrogenerators + uses: actions/checkout@v4 + with: + repository: openchemistry/avogenerators + path: openchemistry/avogadrogenerators - name: Checkout crystals uses: actions/checkout@v4 with: repository: openchemistry/crystals - path: crystals + path: openchemistry/crystals - - name: Checkout i18n + - name: Checkout fragments uses: actions/checkout@v4 with: - repository: openchemistry/avogadro-i18n - path: avogadro-i18n + repository: openchemistry/fragments + path: openchemistry/fragments - - name: Checkout avogadrolibs + - name: Checkout molecules uses: actions/checkout@v4 with: - path: avogadrolibs + repository: openchemistry/molecules + path: openchemistry/molecules - name: Install Qt - uses: jurplel/install-qt-action@v3 + uses: jurplel/install-qt-action@v4 with: aqtversion: '==3.1.*' cache: true From 05e9926d6c1af050575822322ad9b745a246ff40 Mon Sep 17 00:00:00 2001 From: "Matthew J. Milner" Date: Mon, 16 Dec 2024 03:32:12 +0100 Subject: [PATCH 2/7] Fix macOS checkouts, add cleanup step to Linux Signed-off-by: Matthew J. Milner --- .github/workflows/build_linux.yml | 9 +++++++++ .github/workflows/build_mac.yml | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index c15dbf612e..292dd3b867 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -153,3 +153,12 @@ jobs: - name: Setup tmate session if: ${{ failure() }} uses: mxschmitt/action-tmate@v3 + + - name: Cleanup + if: ${{ always() }} # To ensure this step runs even when earlier steps fail + shell: bash + run: | + ls -la ./ + rm -rf ./* || true + rm -rf ./.??* || true + ls -la ./ diff --git a/.github/workflows/build_mac.yml b/.github/workflows/build_mac.yml index a6eea2482a..67cb4fb970 100644 --- a/.github/workflows/build_mac.yml +++ b/.github/workflows/build_mac.yml @@ -70,13 +70,13 @@ jobs: - name: Checkout avogadroapp uses: actions/checkout@v4 with: + repository: openchemistry/avogadroapp path: openchemistry/avogadroapp fetch-depth: 0 - name: Checkout avogadrolibs uses: actions/checkout@v4 with: - repository: openchemistry/avogadrolibs path: openchemistry/avogadrolibs fetch-depth: 0 From 2ced0b2eb3b1a9e07ab3835a000c6edf5c7be221 Mon Sep 17 00:00:00 2001 From: "Matthew J. Milner" Date: Mon, 16 Dec 2024 03:38:01 +0100 Subject: [PATCH 3/7] Remove fetch depth limits Signed-off-by: Matthew J. Milner --- .github/workflows/build_linux.yml | 2 -- .github/workflows/build_mac.yml | 2 -- .github/workflows/build_windows.yml | 2 -- 3 files changed, 6 deletions(-) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index 292dd3b867..d5a736fc8b 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -69,13 +69,11 @@ jobs: with: repository: openchemistry/avogadroapp path: openchemistry/avogadroapp - fetch-depth: 0 - name: Checkout avogadrolibs uses: actions/checkout@v4 with: path: openchemistry/avogadrolibs - fetch-depth: 0 - name: Checkout i18n uses: actions/checkout@v4 diff --git a/.github/workflows/build_mac.yml b/.github/workflows/build_mac.yml index 67cb4fb970..c86e0ea14b 100644 --- a/.github/workflows/build_mac.yml +++ b/.github/workflows/build_mac.yml @@ -72,13 +72,11 @@ jobs: with: repository: openchemistry/avogadroapp path: openchemistry/avogadroapp - fetch-depth: 0 - name: Checkout avogadrolibs uses: actions/checkout@v4 with: path: openchemistry/avogadrolibs - fetch-depth: 0 - name: Checkout i18n uses: actions/checkout@v4 diff --git a/.github/workflows/build_windows.yml b/.github/workflows/build_windows.yml index 0ccbf81c5c..395d5b3bd9 100644 --- a/.github/workflows/build_windows.yml +++ b/.github/workflows/build_windows.yml @@ -64,14 +64,12 @@ jobs: uses: actions/checkout@v4 with: path: openchemistry/avogadroapp - fetch-depth: 0 - name: Checkout avogadrolibs uses: actions/checkout@v4 with: repository: openchemistry/avogadrolibs path: openchemistry/avogadrolibs - fetch-depth: 0 - name: Checkout i18n uses: actions/checkout@v4 From ba424763db372288fb73003843962064dc21c58c Mon Sep 17 00:00:00 2001 From: "Matthew J. Milner" Date: Mon, 16 Dec 2024 03:52:37 +0100 Subject: [PATCH 4/7] Use correct path for configure step Signed-off-by: Matthew J. Milner --- .github/workflows/build_linux.yml | 2 +- .github/workflows/build_mac.yml | 2 +- .github/workflows/build_windows.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index d5a736fc8b..68ce5a62e9 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -115,7 +115,7 @@ jobs: if [ ! -d "${{ runner.workspace }}/build" ]; then mkdir "${{ runner.workspace }}/build"; fi cd "${{ runner.workspace }}/build" # won't have any effect except on Mac - CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake $GITHUB_WORKSPACE ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} + CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake "${{ runner.workspace }}/openchemistry" ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} shell: bash - name: Build diff --git a/.github/workflows/build_mac.yml b/.github/workflows/build_mac.yml index c86e0ea14b..836aa9415b 100644 --- a/.github/workflows/build_mac.yml +++ b/.github/workflows/build_mac.yml @@ -120,7 +120,7 @@ jobs: if [ ! -d "${{ runner.workspace }}/build" ]; then mkdir "${{ runner.workspace }}/build"; fi cd "${{ runner.workspace }}/build" echo "MACOSX_DEPLOYMENT_TARGET=${{ env.MACOS_TARGET }}" >> $GITHUB_ENV - CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake $GITHUB_WORKSPACE ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} + CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake "${{ runner.workspace }}/openchemistry" ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} shell: bash - name: Build diff --git a/.github/workflows/build_windows.yml b/.github/workflows/build_windows.yml index 395d5b3bd9..b08af73f40 100644 --- a/.github/workflows/build_windows.yml +++ b/.github/workflows/build_windows.yml @@ -126,7 +126,7 @@ jobs: run: | if [ ! -d "${{ runner.workspace }}/build" ]; then mkdir "${{ runner.workspace }}/build"; fi cd "${{ runner.workspace }}/build" - CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake $GITHUB_WORKSPACE ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} + CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake "${{ runner.workspace }}/openchemistry" ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} shell: bash - name: Build From 713da70f60f170624b6342d18f3aca72b3ca7608 Mon Sep 17 00:00:00 2001 From: "Matthew J. Milner" Date: Mon, 16 Dec 2024 04:11:52 +0100 Subject: [PATCH 5/7] Try another path Signed-off-by: Matthew J. Milner --- .github/workflows/build_linux.yml | 2 +- .github/workflows/build_mac.yml | 2 +- .github/workflows/build_windows.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index 68ce5a62e9..8f166403cd 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -115,7 +115,7 @@ jobs: if [ ! -d "${{ runner.workspace }}/build" ]; then mkdir "${{ runner.workspace }}/build"; fi cd "${{ runner.workspace }}/build" # won't have any effect except on Mac - CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake "${{ runner.workspace }}/openchemistry" ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} + CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake $GITHUB_WORKSPACE/openchemistry ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} shell: bash - name: Build diff --git a/.github/workflows/build_mac.yml b/.github/workflows/build_mac.yml index 836aa9415b..c968a9c5e9 100644 --- a/.github/workflows/build_mac.yml +++ b/.github/workflows/build_mac.yml @@ -120,7 +120,7 @@ jobs: if [ ! -d "${{ runner.workspace }}/build" ]; then mkdir "${{ runner.workspace }}/build"; fi cd "${{ runner.workspace }}/build" echo "MACOSX_DEPLOYMENT_TARGET=${{ env.MACOS_TARGET }}" >> $GITHUB_ENV - CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake "${{ runner.workspace }}/openchemistry" ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} + CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake $GITHUB_WORKSPACE/openchemistry ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} shell: bash - name: Build diff --git a/.github/workflows/build_windows.yml b/.github/workflows/build_windows.yml index b08af73f40..8447bc9262 100644 --- a/.github/workflows/build_windows.yml +++ b/.github/workflows/build_windows.yml @@ -126,7 +126,7 @@ jobs: run: | if [ ! -d "${{ runner.workspace }}/build" ]; then mkdir "${{ runner.workspace }}/build"; fi cd "${{ runner.workspace }}/build" - CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake "${{ runner.workspace }}/openchemistry" ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} + CC=${{matrix.config.cc}} CXX=${{matrix.config.cxx}} cmake $GITHUB_WORKSPACE/openchemistry ${{env.FEATURES}} -DCMAKE_BUILD_TYPE=${{matrix.config.build_type}} ${{matrix.config.cmake_flags}} shell: bash - name: Build From 20ab9fefe3d99e19e0653ef4b76ef81971545ed8 Mon Sep 17 00:00:00 2001 From: "Matthew J. Milner" Date: Mon, 16 Dec 2024 14:41:39 +0100 Subject: [PATCH 6/7] Fix conditionals in mac workflow Signed-off-by: Matthew J. Milner --- .github/workflows/build_mac.yml | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build_mac.yml b/.github/workflows/build_mac.yml index c968a9c5e9..12c635dac7 100644 --- a/.github/workflows/build_mac.yml +++ b/.github/workflows/build_mac.yml @@ -23,7 +23,7 @@ jobs: config: - { name: "macOS Intel", artifact: "macOS-x86_64.dmg", - os: macos-latest, + os: macos-13, cc: "clang", cxx: "clang++", build_type: "Release", cmake_flags: "-G Ninja -DCMAKE_OSX_ARCHITECTURES='x86_64'", @@ -51,14 +51,13 @@ jobs: steps: - - name: Install Dependencies (macOS) - if: runner.os == 'macOS' - run: | - if uname -p | grep -q "arm" ; then - export PATH=/opt/homebrew/bin:$PATH - else # not self-hosted runner - brew install ninja eigen glew - fi + - name: Install Dependencies + if: matrix.config.name != 'macOS Apple Silicon' + run: brew install ninja eigen glew + + - name: Set PATH (self-hosted) + if: matrix.config.name == 'macOS Apple Silicon' + run: export PATH=/opt/homebrew/bin:$PATH - name: Checkout openchemistry uses: actions/checkout@v4 @@ -110,7 +109,7 @@ jobs: - name: Install Qt # Only if not self-hosted - if: runner.name != 'macOS Apple Silicon' + if: matrix.config.name != 'macOS Apple Silicon' uses: jurplel/install-qt-action@v4 with: version: ${{ env.QT_VERSION }} @@ -130,7 +129,6 @@ jobs: working-directory: ${{ runner.workspace }}/build - name: Fix Mac plugins - if: runner.os == 'macOS' working-directory: ${{ runner.workspace }}/build/prefix/lib/openbabel run: | for plugin in *.so; do @@ -163,7 +161,6 @@ jobs: - name: Install the Apple certificate # From GitHub docs: https://docs.github.com/en/actions/guides/installing-an-apple-certificate-on-macos-runners-for-xcode-development - if: runner.os == 'macOS' working-directory: ${{ runner.workspace }}/build env: BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} @@ -212,7 +209,6 @@ jobs: CODESIGN_IDENTITY: ${{ secrets.CODESIGN_ID }} - name: Notarize Mac DMG - if: runner.os == 'macOS' run: | # check if we have the password and the username if [ -n "${NOTARIZE_PASSWORD}" ] && [ -n "${NOTARIZE_USERNAME}" ]; then From 35529a168f3443134ade427e5ad8cec99a70c336 Mon Sep 17 00:00:00 2001 From: "Matthew J. Milner" Date: Mon, 16 Dec 2024 14:57:26 +0100 Subject: [PATCH 7/7] Switch to GitHub Apple Silicon runner Signed-off-by: Matthew J. Milner --- .github/workflows/build_mac.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build_mac.yml b/.github/workflows/build_mac.yml index 12c635dac7..53ef3e2793 100644 --- a/.github/workflows/build_mac.yml +++ b/.github/workflows/build_mac.yml @@ -31,10 +31,10 @@ jobs: } - { name: "macOS Apple Silicon", artifact: "macOS-arm64.dmg", - os: [self-hosted, macOS], + os: macos-latest, cc: "clang", cxx: "clang++", build_type: "Release", - cmake_flags: "-G Ninja -DCMAKE_PREFIX_PATH=/opt/homebrew/Cellar/qt@5/5.15.5_1/lib/cmake/Qt5", + cmake_flags: "-G Ninja -DCMAKE_OSX_ARCHITECTURES='arm64'", cpack_flags: "-G DragNDrop", } - { @@ -52,12 +52,7 @@ jobs: steps: - name: Install Dependencies - if: matrix.config.name != 'macOS Apple Silicon' run: brew install ninja eigen glew - - - name: Set PATH (self-hosted) - if: matrix.config.name == 'macOS Apple Silicon' - run: export PATH=/opt/homebrew/bin:$PATH - name: Checkout openchemistry uses: actions/checkout@v4 @@ -108,8 +103,6 @@ jobs: path: openchemistry/molecules - name: Install Qt - # Only if not self-hosted - if: matrix.config.name != 'macOS Apple Silicon' uses: jurplel/install-qt-action@v4 with: version: ${{ env.QT_VERSION }}