diff --git a/.github/workflows/build-linux-arm64.yml b/.github/workflows/build-linux-arm64.yml deleted file mode 100644 index df97996..0000000 --- a/.github/workflows/build-linux-arm64.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: build-mailadler-linux-arm64 - -on: - workflow_dispatch: - schedule: - # nightly - - cron: '0 12 * * *' - -jobs: - build: - runs-on: ubuntu-latest - if: ${{ github.repository_owner == 'mltframework' }} - steps: - - name: Download from S3 - run: | - VERSION=$(date +"%y%m%d") - echo VERSION=$VERSION - sudo apt install -yqq s3cmd - s3cmd --access_key=${{ secrets.AWS_ACCESS_KEY }} --secret_key=${{ secrets.AWS_SECRET_KEY }} --stop-on-error get s3://builds.us.meltytech/shotcut-build-li_arm.txt.xz - s3cmd --access_key=${{ secrets.AWS_ACCESS_KEY }} --secret_key=${{ secrets.AWS_SECRET_KEY }} --stop-on-error get s3://builds.us.meltytech/shotcut/shotcut-li_ARM-$VERSION.zip - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: portable - path: | - *.zip - - - name: Dump log - run: xzcat shotcut-build-li_arm.txt.xz diff --git a/.github/workflows/build-linux-unstable.yml b/.github/workflows/build-linux-unstable.yml deleted file mode 100644 index b1c35c5..0000000 --- a/.github/workflows/build-linux-unstable.yml +++ /dev/null @@ -1,98 +0,0 @@ -name: build-shotcut-linux-unstable - -on: - workflow_dispatch: - schedule: - # nightly - - cron: '0 8 * * *' - -env: - IMAGE_NAME: mltframework/shotcut-build:qt6.8.3-ubuntu22.04 - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - with: - ref: qt6 - - - name: Build - run: | - echo Preparing version - echo $(date +"%y.%-m.%-d") > VERSION - VERSION=$(cat VERSION) - echo VERSION=$VERSION - FILENAME_VERSION=UNSTABLE-$VERSION - cd scripts - echo Making build script config file - echo CLEANUP=0 > build-shotcut.conf - echo SHOTCUT_VERSION=\"$VERSION\" >> build-shotcut.conf - echo SHOTCUT_HEAD=0 >> build-shotcut.conf - echo SHOTCUT_REVISION=origin/qt6 >> build-shotcut.conf - docker run -v $PWD:/root/shotcut $IMAGE_NAME - echo Renaming build artifacts - mv shotcut.txz shotcut-linux-x86_64-$FILENAME_VERSION.txz - mv src.txz shotcut-src-$FILENAME_VERSION.txz - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: linux-portable - path: | - scripts/shotcut-linux-x86_64-*.txz - - - name: Upload portable and source archives to S3 - if: ${{ github.repository_owner == 'mltframework' }} - uses: mltframework/s3cmd-action@v0 - with: - args: >- - --access_key=${{ secrets.AWS_ACCESS_KEY }} - --secret_key=${{ secrets.AWS_SECRET_KEY }} - --acl-public - --stop-on-error - put scripts/*.txz s3://builds.us.meltytech/shotcut/ - - - name: Package AppImage - run: | - sudo apt install desktop-file-utils - mkdir packaging/linux/Shotcut - cp VERSION packaging/linux/Shotcut/ - cd packaging/linux - wget https://raw.githubusercontent.com/probonopd/AppImages/master/pkg2appimage - bash -ex pkg2appimage appimage/appimage.yml - FILENAME_VERSION=UNSTABLE-$(cat Shotcut/VERSION) - mv out/*.AppImage out/shotcut-linux-x86_64-$FILENAME_VERSION.AppImage - - - name: Upload AppImage to S3 - if: ${{ github.repository_owner == 'mltframework' }} - uses: mltframework/s3cmd-action@v0 - with: - args: >- - --access_key=${{ secrets.AWS_ACCESS_KEY }} - --secret_key=${{ secrets.AWS_SECRET_KEY }} - --acl-public - --stop-on-error - put packaging/linux/out/*.AppImage s3://builds.us.meltytech/shotcut/ - - - name: Install Snapcraft - if: ${{ github.repository_owner == 'mltframework' }} - uses: samuelmeuli/action-snapcraft@v1.2.0 - with: - use_lxd: true - - name: Package snap - if: ${{ github.repository_owner == 'mltframework' }} - env: - SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_TOKEN }} - run: | - VERSION=$(cat VERSION) - mv scripts/shotcut-linux-x86_64-*.txz packaging/linux - cd packaging/linux - mkdir -p snap/gui - cp ../../icons/shotcut-logo-64.png snap/gui - sed 's|Icon=.*|Icon=${SNAP}/meta/gui/shotcut-logo-64.png|' org.shotcut.Shotcut.desktop > snap/gui/shotcut.desktop - FILENAME=$(ls *.txz) - sed "s/\$VERSION/${VERSION}/ ; s/\$FILENAME/${FILENAME}/" snapcraft.yaml.in > snap/snapcraft.yaml - sg lxd -c 'snapcraft --use-lxd' - snapcraft upload --release=edge shotcut_*.snap diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index b001d0f..c948e9a 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -2,99 +2,104 @@ name: build-mailadler-linux on: workflow_dispatch: - schedule: - # nightly - - cron: '0 8 * * *' + push: + branches: [main, master] + paths: + - 'src/**' + - 'CMakeLists.txt' + - '.github/workflows/build-linux.yml' + pull_request: + branches: [main, master] env: - IMAGE_NAME: ubuntu:22.04 #mltframework/shotcut-build:qt6.8.3-ubuntu22.04 + QT_VERSION: 6.6.3 jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: ${{ env.QT_VERSION }} + modules: 'qtwebsockets' + cache: true + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + build-essential \ + cmake \ + ninja-build \ + libgl1-mesa-dev \ + libxkbcommon-dev \ + libxcb-xinerama0-dev \ + libxcb-cursor0 \ + libsqlite3-dev \ + libssl-dev \ + desktop-file-utils \ + libfuse2 \ + imagemagick + + - name: Prepare version + run: | + VERSION=$(date +"%y.%-m.%-d") + echo "VERSION=$VERSION" >> $GITHUB_ENV + + - name: Configure + run: | + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr - name: Build - run: | - echo Preparing version - echo $(date +"%y.%-m.%-d") > VERSION - VERSION=$(cat VERSION) - echo VERSION=$VERSION - FILENAME_VERSION=$VERSION - cd scripts - echo Making build script config file - echo CLEANUP=0 > build-mailadler.conf - echo mailadler_VERSION=\"$VERSION\" >> build-mailadler.conf - docker run -v $PWD:/root/mailadler $IMAGE_NAME - echo Renaming build artifacts - mv mailadler.txz mailadler-linux-x86_64-$FILENAME_VERSION.txz - mv src.txz mailadler-src-$FILENAME_VERSION.txz + run: cmake --build build --parallel - - name: Upload artifact + - name: Package portable + run: | + cd build + DESTDIR=../mailadler-portable cmake --install . + cd .. + tar -cJf mailadler-linux-x86_64-${{ env.VERSION }}.txz mailadler-portable + + - name: Upload portable artifact uses: actions/upload-artifact@v4 with: name: linux-portable - path: | - scripts/mailadler-linux-x86_64-*.txz - - - name: Upload portable and source archives to S3 - if: ${{ github.repository_owner == 'mltframework' }} - uses: mltframework/s3cmd-action@v0 - with: - args: >- - --access_key=${{ secrets.AWS_ACCESS_KEY }} - --secret_key=${{ secrets.AWS_SECRET_KEY }} - --acl-public - --stop-on-error - put scripts/*.txz s3://builds.us.meltytech/mailadler/ + path: mailadler-linux-x86_64-*.txz - name: Package AppImage run: | - sudo apt update - sudo apt install desktop-file-utils libfuse2 imagemagick - mkdir packaging/linux/mailadler - cp VERSION packaging/linux/mailadler/ + mkdir -p packaging/linux/mailadler + echo "${{ env.VERSION }}" > packaging/linux/mailadler/VERSION cd packaging/linux export PKG2AICOMMIT=1eceb306077e51b991e987690b364e11971b44b3 - wget https://raw.githubusercontent.com/probonopd/AppImages/${PKG2AICOMMIT}/pkg2appimage - bash -ex pkg2appimage appimage/appimage.yml - FILENAME_VERSION=$(cat mailadler/VERSION) - mv out/*.AppImage out/mailadler-linux-x86_64-$FILENAME_VERSION.AppImage + wget -q https://raw.githubusercontent.com/probonopd/AppImages/${PKG2AICOMMIT}/pkg2appimage || true + if [ -f pkg2appimage ] && [ -f appimage/appimage.yml ]; then + bash -ex pkg2appimage appimage/appimage.yml + mv out/*.AppImage out/mailadler-linux-x86_64-${{ env.VERSION }}.AppImage 2>/dev/null || echo "AppImage packaging skipped" + else + echo "AppImage packaging not configured yet" + fi - - name: Upload AppImage to S3 - if: ${{ github.repository_owner == 'mltframework' }} - uses: mltframework/s3cmd-action@v0 + - name: Upload AppImage artifact + if: success() + uses: actions/upload-artifact@v4 with: - args: >- - --access_key=${{ secrets.AWS_ACCESS_KEY }} - --secret_key=${{ secrets.AWS_SECRET_KEY }} - --acl-public - --stop-on-error - put packaging/linux/out/*.AppImage s3://builds.us.meltytech/mailadler/ + name: linux-appimage + path: packaging/linux/out/*.AppImage + if-no-files-found: ignore - - name: Prepare snap - run: | - VERSION=$(cat VERSION) - mv scripts/mailadler-linux-x86_64-*.txz packaging/linux - cd packaging/linux - mkdir -p snap/gui - cp ../../icons/mailadler-logo-64.png snap/gui - sed 's|Icon=.*|Icon=${SNAP}/meta/gui/mailadler-logo-64.png|' org.mailadler.mailadler.desktop > snap/gui/mailadler.desktop - FILENAME=$(ls *.txz) - sed "s/\$VERSION/${VERSION}/ ; s/\$FILENAME/${FILENAME}/" snapcraft.yaml.in > snap/snapcraft.yaml - - name: Package snap - if: ${{ github.repository_owner == 'mltframework' }} - uses: snapcore/action-build@v1 - id: snap + - name: Upload to release (on tag) + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v1 with: - path: packaging/linux - - name: Publish snap - if: ${{ github.repository_owner == 'mltframework' }} - uses: snapcore/action-publish@v1 - env: - SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.SNAPCRAFT_TOKEN }} - with: - snap: ${{ steps.snap.outputs.snap }} - release: edge + files: | + mailadler-linux-x86_64-*.txz + packaging/linux/out/*.AppImage diff --git a/.github/workflows/build-macos-unstable.yml b/.github/workflows/build-macos-unstable.yml deleted file mode 100644 index 8713153..0000000 --- a/.github/workflows/build-macos-unstable.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: build-shotcut-macos-unstable - -on: - workflow_dispatch: - schedule: - # nightly - - cron: '0 12 * * *' - -jobs: - build: - if: ${{ github.repository_owner == 'mltframework' }} - runs-on: ubuntu-latest - steps: - - name: Download from S3 - run: | - VERSION=$(date +"UNSTABLE-%y.%-m.%-d") - echo VERSION=$VERSION - sudo apt install -yqq s3cmd - s3cmd --access_key=${{ secrets.AWS_ACCESS_KEY }} --secret_key=${{ secrets.AWS_SECRET_KEY }} --stop-on-error get s3://builds.us.meltytech/shotcut-build-macos-unstable.txt - s3cmd --access_key=${{ secrets.AWS_ACCESS_KEY }} --secret_key=${{ secrets.AWS_SECRET_KEY }} --stop-on-error get s3://builds.us.meltytech/shotcut/shotcut-macos-unsigned-$VERSION.dmg - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: unsigned-dmg - path: | - *.dmg - - - name: Dump log - run: cat shotcut-build-macos-unstable.txt diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index d4fc4be..5cca992 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -1,30 +1,79 @@ -name: build-shotcut-macos +name: build-mailadler-macos on: workflow_dispatch: - schedule: - # nightly - - cron: '0 12 * * *' + push: + branches: [main, master] + paths: + - 'src/**' + - 'CMakeLists.txt' + - '.github/workflows/build-macos.yml' + pull_request: + branches: [main, master] + +env: + QT_VERSION: 6.6.3 jobs: build: - runs-on: ubuntu-latest - if: ${{ github.repository_owner == 'mltframework' }} + runs-on: macos-14 # Apple Silicon + steps: - - name: Download from S3 + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: ${{ env.QT_VERSION }} + modules: 'qtwebsockets' + cache: true + + - name: Install dependencies + run: | + brew install ninja openssl@3 + + - name: Prepare version run: | VERSION=$(date +"%y.%-m.%-d") - echo VERSION=$VERSION - sudo apt install -yqq s3cmd - s3cmd --access_key=${{ secrets.AWS_ACCESS_KEY }} --secret_key=${{ secrets.AWS_SECRET_KEY }} --stop-on-error get s3://builds.us.meltytech/shotcut-build-macos.txt.xz - s3cmd --access_key=${{ secrets.AWS_ACCESS_KEY }} --secret_key=${{ secrets.AWS_SECRET_KEY }} --stop-on-error get s3://builds.us.meltytech/shotcut/shotcut-macos-unsigned-$VERSION.dmg + echo "VERSION=$VERSION" >> $GITHUB_ENV - - name: Upload artifacts + - name: Configure + run: | + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_PREFIX_PATH="$Qt6_DIR" \ + -DOPENSSL_ROOT_DIR="$(brew --prefix openssl@3)" + + - name: Build + run: cmake --build build --parallel + + - name: Package DMG + run: | + cd build + # Create app bundle structure + mkdir -p mailadler.app/Contents/MacOS + mkdir -p mailadler.app/Contents/Resources + cp src/mailadler mailadler.app/Contents/MacOS/ 2>/dev/null || cp src/mailadler.app/Contents/MacOS/mailadler mailadler.app/Contents/MacOS/ 2>/dev/null || true + + # Deploy Qt frameworks + $Qt6_DIR/bin/macdeployqt mailadler.app -dmg 2>/dev/null || true + + # Rename DMG + mv mailadler.dmg ../mailadler-macos-${{ env.VERSION }}.dmg 2>/dev/null || \ + hdiutil create -volname "mailadler" -srcfolder mailadler.app -ov -format UDZO ../mailadler-macos-${{ env.VERSION }}.dmg 2>/dev/null || \ + echo "DMG creation skipped" + + - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: unsigned-dmg - path: | - *.dmg + name: macos-dmg + path: mailadler-macos-*.dmg + if-no-files-found: ignore - - name: Dump log - run: xzcat shotcut-build-macos.txt.xz + - name: Upload to release (on tag) + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v1 + with: + files: mailadler-macos-*.dmg diff --git a/.github/workflows/build-sdk-windows-unstable.yml b/.github/workflows/build-sdk-windows-unstable.yml deleted file mode 100644 index 5ac3f47..0000000 --- a/.github/workflows/build-sdk-windows-unstable.yml +++ /dev/null @@ -1,111 +0,0 @@ -name: build-shotcut-sdk-windows-unstable - -on: - workflow_dispatch: - -jobs: - build: - runs-on: windows-latest - - steps: - - name: Setup MSYS2 - uses: msys2/setup-msys2@v2 - with: - msystem: MINGW64 - update: true - install: >- - autotools base-devel bzip2 coreutils git gzip tar xz zip - perl-List-MoreUtils perl-XML-Parser - mingw-w64-x86_64-toolchain - mingw-w64-x86_64-cmake - mingw-w64-x86_64-meson - mingw-w64-x86_64-nasm - mingw-w64-x86_64-ninja - mingw-w64-x86_64-python-pip - mingw-w64-x86_64-yasm - mingw-w64-x86_64-cairo - mingw-w64-x86_64-eigen3 - mingw-w64-x86_64-dlfcn - mingw-w64-x86_64-fftw - mingw-w64-x86_64-harfbuzz - mingw-w64-x86_64-lame - mingw-w64-x86_64-libepoxy - mingw-w64-x86_64-libexif - mingw-w64-x86_64-libsamplerate - mingw-w64-x86_64-libtheora - mingw-w64-x86_64-libvorbis - mingw-w64-x86_64-libvpx - mingw-w64-x86_64-libwebp - mingw-w64-x86_64-libxml2 - mingw-w64-x86_64-openblas - mingw-w64-x86_64-onevpl - mingw-w64-x86_64-openssl - mingw-w64-x86_64-opus - mingw-w64-x86_64-rubberband - mingw-w64-x86_64-sox - mingw-w64-x86_64-vid.stab - mingw-w64-x86_64-x264 - mingw-w64-x86_64-x265 - mingw-w64-x86_64-libarchive - mingw-w64-x86_64-potrace - mingw-w64-x86_64-libimagequant - mingw-w64-x86_64-python3.11 - - - uses: actions/checkout@v4 - with: - ref: qt6 - - - name: Build - shell: msys2 {0} - run: | - pacman --noconfirm -Rdd mingw-w64-x86_64-aom - echo Preparing version - echo $(date +"%y.%-m.%-d") > VERSION - VERSION=$(cat VERSION) - echo VERSION=$VERSION - FILENAME_VERSION=UNSTABLE-$VERSION - pushd "$HOME" - echo Downloading Qt - mkdir Qt - cd Qt - curl -kLO --no-progress-meter https://s3.amazonaws.com/misc.meltymedia/shotcut-build/qt-6.4.2-x64-mingw810.txz - echo Extracting Qt - tar -xJf qt-6.4.2-x64-mingw810.txz - cd .. - echo Downloading a few prebuilt dependencies - curl -LO --no-progress-meter https://s3.amazonaws.com/misc.meltymedia/shotcut-build/mlt-prebuilt-mingw64-v4.txz - echo Extracting prebuilt dependencies - tar -xJf mlt-prebuilt-mingw64-v5.txz - rm mlt-prebuilt-mingw64-v5.txz - CHECKOUT_DIR=$(popd) - popd - echo Running the build script - echo INSTALL_DIR=\"$CHECKOUT_DIR/build\" - echo INSTALL_DIR=\"$CHECKOUT_DIR/build\" > build-shotcut.conf - echo SHOTCUT_VERSION=\"$VERSION\" >> build-shotcut.conf - echo SHOTCUT_HEAD=0 >> build-shotcut.conf - echo SHOTCUT_REVISION=origin/qt6 >> build-shotcut.conf - echo DEBUG_BUILD=1 >> build-shotcut.conf - bash scripts/build-shotcut-msys2.sh -s - mv build/shotcut-sdk.zip build/shotcut-win64-sdk-$FILENAME_VERSION.zip - echo Done - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: windows-sdk - path: ./build/shotcut-win64-sdk-*.zip - - - name: Upload packages to S3 - if: ${{ github.repository_owner == 'mltframework' }} - shell: msys2 {0} - run: | - echo Installing awscli - pip install awscli - export AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY }} - export AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_KEY }} - export AWS_DEFAULT_REGION=us-east-1 - for file in build/*.zip; do - echo Uploading "$file" to S3 - aws s3 cp --acl public-read "$file" s3://builds.us.meltytech/shotcut/ --no-progress - done diff --git a/.github/workflows/build-sdk-windows.yml b/.github/workflows/build-sdk-windows.yml deleted file mode 100644 index 924af29..0000000 --- a/.github/workflows/build-sdk-windows.yml +++ /dev/null @@ -1,112 +0,0 @@ -name: build-shotcut-sdk-windows - -on: - workflow_dispatch: - -jobs: - build: - runs-on: windows-latest - - steps: - - name: Setup MSYS2 - uses: msys2/setup-msys2@v2 - with: - msystem: MINGW64 - update: true - install: >- - autotools base-devel bzip2 coreutils git gzip tar xz zip - perl-List-MoreUtils perl-XML-Parser - mingw-w64-x86_64-toolchain - mingw-w64-x86_64-cmake - mingw-w64-x86_64-meson - mingw-w64-x86_64-nasm - mingw-w64-x86_64-ninja - mingw-w64-x86_64-yasm - mingw-w64-x86_64-cairo - mingw-w64-x86_64-eigen3 - mingw-w64-x86_64-dlfcn - mingw-w64-x86_64-fftw - mingw-w64-x86_64-gcc-fortran - mingw-w64-x86_64-gettext-tools - mingw-w64-x86_64-harfbuzz - mingw-w64-x86_64-lame - mingw-w64-x86_64-libarchive - mingw-w64-x86_64-libepoxy - mingw-w64-x86_64-libexif - mingw-w64-x86_64-libimagequant - mingw-w64-x86_64-libsamplerate - mingw-w64-x86_64-libtheora - mingw-w64-x86_64-libvorbis - mingw-w64-x86_64-libvpx - mingw-w64-x86_64-libwebp - mingw-w64-x86_64-libxml2 - mingw-w64-x86_64-openblas - mingw-w64-x86_64-onevpl - mingw-w64-x86_64-openssl - mingw-w64-x86_64-opus - mingw-w64-x86_64-potrace - mingw-w64-x86_64-python-pip - mingw-w64-x86_64-rubberband - mingw-w64-x86_64-sox - mingw-w64-x86_64-svt-av1 - mingw-w64-x86_64-vid.stab - mingw-w64-x86_64-x264 - mingw-w64-x86_64-x265 - mingw-w64-x86_64-zimg - - - uses: actions/checkout@v4 - - - name: Build - shell: msys2 {0} - run: | - pacman --noconfirm -Rdd mingw-w64-x86_64-aom - echo Preparing version - echo $(date +"%y.%-m.%-d") > VERSION - VERSION=$(cat VERSION) - echo VERSION=$VERSION - FILENAME_VERSION=$VERSION - pushd "$HOME" - echo Downloading Qt - mkdir Qt - cd Qt - curl -kLO --no-progress-meter https://s3.amazonaws.com/misc.meltymedia/shotcut-build/qt-6.10.1-x64-mingw.txz - echo Extracting Qt - tar -xJf qt-6.10.1-x64-mingw.txz - rm qt-6.10.1-x64-mingw.txz - cd .. - echo Downloading a few prebuilt dependencies - curl -LO --no-progress-meter https://s3.amazonaws.com/misc.meltymedia/shotcut-build/mlt-prebuilt-mingw64-v6.txz - echo Extracting prebuilt dependencies - tar -xJf mlt-prebuilt-mingw64-v6.txz - rm mlt-prebuilt-mingw64-v6.txz - CHECKOUT_DIR=$(popd) - popd - echo Running the build script - echo INSTALL_DIR=\"$CHECKOUT_DIR/build\" - echo INSTALL_DIR=\"$CHECKOUT_DIR/build\" > build-shotcut.conf - echo SHOTCUT_VERSION=\"$VERSION\" >> build-shotcut.conf - echo ENABLE_GLAXNIMATE=0 >> build-shotcut.conf - echo DEBUG_BUILD=1 >> build-shotcut.conf - bash scripts/build-shotcut-msys2.sh -s - mv build/shotcut-sdk.txz build/shotcut-win64-sdk-$FILENAME_VERSION.txz - echo Done - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: windows-sdk - path: ./build/shotcut-win64-sdk-*.txz - - - name: Upload packages to S3 - if: ${{ github.repository_owner == 'mltframework' }} - shell: msys2 {0} - run: | - echo Installing awscli - pip install awscli - export AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY }} - export AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_KEY }} - export AWS_DEFAULT_REGION=us-east-1 - for file in build/*.txz; do - echo Uploading "$file" to S3 - aws s3 cp --acl public-read "$file" s3://builds.us.meltytech/shotcut/ --no-progress - done diff --git a/.github/workflows/build-windows-unstable.yml b/.github/workflows/build-windows-unstable.yml deleted file mode 100644 index c980f84..0000000 --- a/.github/workflows/build-windows-unstable.yml +++ /dev/null @@ -1,135 +0,0 @@ -name: build-shotcut-windows-unstable - -on: - workflow_dispatch: - schedule: - # nightly - - cron: '0 8 * * *' - -jobs: - build: - if: ${{ github.repository_owner == 'mltframework' }} - runs-on: windows-latest - - steps: - - name: Setup MSYS2 - uses: msys2/setup-msys2@v2 - with: - msystem: MINGW64 - update: true - install: >- - autotools base-devel bzip2 coreutils git gzip tar xz zip - perl-List-MoreUtils perl-XML-Parser - mingw-w64-x86_64-toolchain - mingw-w64-x86_64-cmake - mingw-w64-x86_64-meson - mingw-w64-x86_64-nasm - mingw-w64-x86_64-ninja - mingw-w64-x86_64-nsis - mingw-w64-x86_64-osslsigncode - mingw-w64-x86_64-python-pip - mingw-w64-x86_64-yasm - mingw-w64-x86_64-cairo - mingw-w64-x86_64-eigen3 - mingw-w64-x86_64-dlfcn - mingw-w64-x86_64-fftw - mingw-w64-x86_64-harfbuzz - mingw-w64-x86_64-lame - mingw-w64-x86_64-libepoxy - mingw-w64-x86_64-libexif - mingw-w64-x86_64-libsamplerate - mingw-w64-x86_64-libtheora - mingw-w64-x86_64-libvorbis - mingw-w64-x86_64-libvpx - mingw-w64-x86_64-libwebp - mingw-w64-x86_64-libxml2 - mingw-w64-x86_64-openblas - mingw-w64-x86_64-onevpl - mingw-w64-x86_64-openssl - mingw-w64-x86_64-opus - mingw-w64-x86_64-rubberband - mingw-w64-x86_64-sox - mingw-w64-x86_64-vid.stab - mingw-w64-x86_64-x264 - mingw-w64-x86_64-x265 - mingw-w64-x86_64-libarchive - mingw-w64-x86_64-potrace - mingw-w64-x86_64-libimagequant - mingw-w64-x86_64-python3.11 - - - uses: actions/checkout@v4 - with: - ref: qt6 - - - name: Build - shell: msys2 {0} - run: | - pacman --noconfirm -Rdd mingw-w64-x86_64-aom - echo Preparing version - echo $(date +"%y.%-m.%-d") > VERSION - VERSION=$(cat VERSION) - echo VERSION=$VERSION - FILENAME_VERSION=UNSTABLE-$VERSION - pushd "$HOME" - echo Downloading Qt - mkdir Qt - cd Qt - curl -kLO --no-progress-meter https://s3.amazonaws.com/misc.meltymedia/shotcut-build/qt-6.4.2-x64-mingw810.txz - echo Extracting Qt - tar -xJf qt-6.4.2-x64-mingw810.txz - cd .. - echo Downloading a few prebuilt dependencies - curl -kLO --no-progress-meter https://s3.amazonaws.com/misc.meltymedia/shotcut-build/mlt-prebuilt-mingw64-v5.txz - echo Extracting prebuilt dependencies - tar -xJf mlt-prebuilt-mingw64-v5.txz - CHECKOUT_DIR=$(popd) - popd - echo Running the build script - echo INSTALL_DIR=\"$CHECKOUT_DIR/build\" - echo INSTALL_DIR=\"$CHECKOUT_DIR/build\" > build-shotcut.conf - echo SHOTCUT_VERSION=\"$VERSION\" >> build-shotcut.conf - echo SHOTCUT_HEAD=0 >> build-shotcut.conf - echo SHOTCUT_REVISION=origin/qt6 >> build-shotcut.conf - bash scripts/build-shotcut-msys2.sh - pushd build - echo Installing awscli - pip install awscli - export AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY }} - export AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_KEY }} - export AWS_DEFAULT_REGION=us-east-1 - echo Downloading code-signing certificates - aws s3 cp s3://misc.meltymedia/shotcut-build/CodeSignCertificates.p12.new ./ --no-progress - aws s3 cp s3://misc.meltymedia/shotcut-build/CodeSignCertificates.pass ./ --no-progress - echo Signing shotcut.exe - osslsigncode sign -pkcs12 CodeSignCertificates.p12.new -readpass CodeSignCertificates.pass -n "Shotcut" -i "https://www.meltytech.com" -t "http://timestamp.digicert.com" -in Shotcut/shotcut.exe -out Shotcut/shotcut-signed.exe - mv Shotcut/shotcut-signed.exe Shotcut/shotcut.exe - echo Signing glaxnimate.exe - osslsigncode sign -pkcs12 CodeSignCertificates.p12.new -readpass CodeSignCertificates.pass -n "Shotcut" -i "https://www.meltytech.com" -t "http://timestamp.digicert.com" -in Shotcut/glaxnimate.exe -out Shotcut/glaxnimate-signed.exe - mv Shotcut/glaxnimate-signed.exe Shotcut/glaxnimate.exe - echo Packaging the portable zip - zip -gr shotcut-win64-$FILENAME_VERSION.zip Shotcut - echo Packaging the installer - makensis shotcut.nsi - echo Signing the installer - osslsigncode sign -pkcs12 CodeSignCertificates.p12.new -readpass CodeSignCertificates.pass -n "Shotcut Installer" -i "https://www.meltytech.com" -t "http://timestamp.digicert.com" -in shotcut-setup.exe -out shotcut-setup-signed.exe - mv shotcut-setup-signed.exe shotcut-win64-$FILENAME_VERSION.exe - rm shotcut-setup.exe - popd - echo Done - - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: windows-portable - path: ./build/shotcut-win64-*.zip - - - name: Upload packages to S3 - shell: msys2 {0} - run: | - export AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY }} - export AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_KEY }} - export AWS_DEFAULT_REGION=us-east-1 - for file in build/*.{exe,zip}; do - echo Uploading "$file" to S3 - aws s3 cp "$file" s3://builds.us.meltytech/shotcut/ --no-progress - done diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index d6a9b70..1fefcde 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -2,143 +2,67 @@ name: build-mailadler-windows on: workflow_dispatch: - schedule: - # nightly - - cron: '0 8 * * *' + push: + branches: [main, master] + paths: + - 'src/**' + - 'CMakeLists.txt' + - '.github/workflows/build-windows.yml' + pull_request: + branches: [main, master] + +env: + QT_VERSION: 6.6.3 jobs: build: - if: ${{ github.repository_owner == 'mltframework' }} runs-on: windows-latest steps: - - name: Setup MSYS2 - uses: msys2/setup-msys2@v2 - with: - msystem: MINGW64 - update: true - install: >- - autotools base-devel bzip2 coreutils git gzip tar xz zip - perl-List-MoreUtils perl-XML-Parser - mingw-w64-x86_64-toolchain - mingw-w64-x86_64-cmake - mingw-w64-x86_64-meson - mingw-w64-x86_64-nasm - mingw-w64-x86_64-ninja - mingw-w64-x86_64-osslsigncode - mingw-w64-x86_64-yasm - mingw-w64-x86_64-cairo - mingw-w64-x86_64-eigen3 - mingw-w64-x86_64-dlfcn - mingw-w64-x86_64-fftw - mingw-w64-x86_64-gcc-fortran - mingw-w64-x86_64-gettext-tools - mingw-w64-x86_64-harfbuzz - mingw-w64-x86_64-lame - mingw-w64-x86_64-libarchive - mingw-w64-x86_64-libepoxy - mingw-w64-x86_64-libexif - mingw-w64-x86_64-libimagequant - mingw-w64-x86_64-libsamplerate - mingw-w64-x86_64-libtheora - mingw-w64-x86_64-libvorbis - mingw-w64-x86_64-libvpx - mingw-w64-x86_64-libwebp - mingw-w64-x86_64-libxml2 - mingw-w64-x86_64-onevpl - mingw-w64-x86_64-openblas - mingw-w64-x86_64-openssl - mingw-w64-x86_64-opus - mingw-w64-x86_64-potrace - mingw-w64-x86_64-python-pip - mingw-w64-x86_64-rubberband - mingw-w64-x86_64-sox - mingw-w64-x86_64-svt-av1 - mingw-w64-x86_64-vid.stab - mingw-w64-x86_64-x264 - mingw-w64-x86_64-x265 - mingw-w64-x86_64-zimg - - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Qt + uses: jurplel/install-qt-action@v4 + with: + version: ${{ env.QT_VERSION }} + arch: win64_msvc2019_64 + modules: 'qtwebsockets' + cache: true + + - name: Configure + run: | + cmake -B build -G "Visual Studio 17 2022" -A x64 ` + -DCMAKE_BUILD_TYPE=Release - name: Build - shell: msys2 {0} + run: cmake --build build --config Release --parallel + + - name: Prepare version + shell: bash run: | - pacman --noconfirm -Rdd mingw-w64-x86_64-aom - echo Preparing version - echo $(date +"%y.%-m.%-d") > VERSION - VERSION=$(cat VERSION) - echo VERSION=$VERSION - FILENAME_VERSION=$VERSION - pushd "$HOME" - mkdir Qt - cd Qt - echo Downloading Qt - curl -kLO --no-progress-meter https://s3.amazonaws.com/misc.meltymedia/mailadler-build/qt-6.10.1-x64-mingw.txz - echo Extracting Qt - tar -xJf qt-6.10.1-x64-mingw.txz - rm qt-6.10.1-x64-mingw.txz - cd .. - echo Downloading a few prebuilt dependencies - curl -kLO --no-progress-meter https://s3.amazonaws.com/misc.meltymedia/mailadler-build/mlt-prebuilt-mingw64-v6.txz - echo Extracting prebuilt dependencies - tar -xJf mlt-prebuilt-mingw64-v6.txz - rm mlt-prebuilt-mingw64-v6.txz - CHECKOUT_DIR=$(popd) - popd - echo Running the build script - echo INSTALL_DIR=\"$CHECKOUT_DIR/build\" - echo INSTALL_DIR=\"$CHECKOUT_DIR/build\" > build-mailadler.conf - echo mailadler_VERSION=\"$VERSION\" >> build-mailadler.conf - bash scripts/build-mailadler-msys2.sh - pushd build - echo Installing awscli - pip install awscli - export AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY }} - export AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_KEY }} - export AWS_DEFAULT_REGION=us-east-1 - echo Downloading code-signing certificates - aws s3 cp s3://misc.meltymedia/mailadler-build/CodeSignCertificates2023.p12 ./ --no-progress - aws s3 cp s3://misc.meltymedia/mailadler-build/CodeSignCertificates.pass ./ --no-progress - for EXE in mailadler/*.exe; do - echo Signing ${EXE} - osslsigncode sign -pkcs12 CodeSignCertificates2023.p12 -readpass CodeSignCertificates.pass -n "mailadler" -i "https://www.meltytech.com" -t "http://timestamp.digicert.com" -in ${EXE} -out ${EXE}-signed - mv ${EXE}-signed ${EXE} - done - echo Packaging the portable zip - zip -gr mailadler-win64-$FILENAME_VERSION.zip mailadler - echo Packaging the installer - PATH="$HOME/bin:$PATH" - pushd $HOME/bin - curl -kLO --no-progress-meter https://s3.amazonaws.com/misc.meltymedia/mailadler-build/iscc632.txz - tar -xJf iscc632.txz - popd - echo Extracting installer dependencies - curl -kLO --no-progress-meter https://s3.amazonaws.com/misc.meltymedia/mailadler-build/innosetup-opera-1.txz - tar -xJf innosetup-opera-1.txz - rm innosetup-opera-1.txz - echo Running Inno Setup Compiler - ISCC -Q -O. mailadler.iss - echo Signing the installer - osslsigncode sign -pkcs12 CodeSignCertificates2023.p12 -readpass CodeSignCertificates.pass -n "mailadler Installer" -i "https://www.meltytech.com" -t "http://timestamp.digicert.com" -in mailadler-setup.exe -out mailadler-setup-signed.exe - mv mailadler-setup-signed.exe mailadler-win64-$FILENAME_VERSION.exe - rm mailadler-setup.exe - popd - echo Done + VERSION=$(date +"%y.%-m.%-d") + echo "VERSION=$VERSION" >> $GITHUB_ENV + + - name: Package + shell: pwsh + run: | + $version = "${{ env.VERSION }}" + New-Item -ItemType Directory -Force -Path "mailadler-win64" + Copy-Item -Path "build\src\Release\mailadler.exe" -Destination "mailadler-win64\" -ErrorAction SilentlyContinue + # Deploy Qt dependencies + & "$env:Qt6_DIR\bin\windeployqt.exe" "mailadler-win64\mailadler.exe" 2>$null + Compress-Archive -Path "mailadler-win64\*" -DestinationPath "mailadler-win64-$version.zip" - name: Upload artifact uses: actions/upload-artifact@v4 with: name: windows-portable - path: ./build/mailadler-win64-*.zip + path: mailadler-win64-*.zip - - name: Upload packages to S3 - shell: msys2 {0} - run: | - export AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY }} - export AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_KEY }} - export AWS_DEFAULT_REGION=us-east-1 - for file in build/*.{exe,zip}; do - echo Uploading "$file" to S3 - aws s3 cp "$file" s3://builds.us.meltytech/mailadler/ --no-progress - done + - name: Upload to release (on tag) + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v1 + with: + files: mailadler-win64-*.zip diff --git a/.github/workflows/build-windows_arm64.yml b/.github/workflows/build-windows_arm64.yml deleted file mode 100644 index c570cba..0000000 --- a/.github/workflows/build-windows_arm64.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: build-shotcut-windows-arm64 - -on: - workflow_dispatch: - schedule: - # nightly - - cron: '0 12 * * *' - -jobs: - build: - runs-on: ubuntu-latest - if: ${{ github.repository_owner == 'mltframework' }} - steps: - - name: Download from S3 - run: | - VERSION=$(date +"%y%m%d") - echo VERSION=$VERSION - sudo apt install -yqq s3cmd - s3cmd --access_key=${{ secrets.AWS_ACCESS_KEY }} --secret_key=${{ secrets.AWS_SECRET_KEY }} --stop-on-error get s3://builds.us.meltytech/shotcut-build-win_arm.txt.xz - s3cmd --access_key=${{ secrets.AWS_ACCESS_KEY }} --secret_key=${{ secrets.AWS_SECRET_KEY }} --stop-on-error get s3://builds.us.meltytech/shotcut/shotcut-win_ARM-$VERSION.zip - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: portable - path: | - *.zip - - - name: Dump log - run: xzcat shotcut-build-win_arm.txt.xz diff --git a/.github/workflows/check-code-format.yml b/.github/workflows/check-code-format.yml index c1ae176..bff7a66 100644 --- a/.github/workflows/check-code-format.yml +++ b/.github/workflows/check-code-format.yml @@ -3,8 +3,9 @@ name: check-code-format on: workflow_dispatch: pull_request: - types: [opened, reopened] + types: [opened, reopened, synchronize] push: + branches: [main, master] jobs: clang-format: @@ -19,22 +20,23 @@ jobs: - name: Check style run: | - FILES=`find . -type f -name "*.h" -o -name "*.c" -o -name "*.cpp"` - FILTERED_FILES=() - for file in ${FILES[@]}; - do - [[ $file =~ "./src/" ]] && - [[ ! $file =~ "spatialmedia" ]] && - [[ ! $file =~ "defaultlayouts.h" ]] && - [[ ! $file =~ "_autogen" ]] && - FILTERED_FILES+=($file) - done - clang-format-14 --verbose --dry-run --Werror -style=file -i ${FILTERED_FILES[@]} - if [ $? -eq 0 ] - then - echo "SUCCESS: All files are formatted correctly" + FILES=$(find ./src -type f \( -name "*.h" -o -name "*.c" -o -name "*.cpp" \) \ + ! -path "*/spatialmedia/*" \ + ! -name "defaultlayouts.h" \ + ! -path "*_autogen*") + + if [ -z "$FILES" ]; then + echo "No source files found to check" exit 0 - else - echo "FAILURE: some files are formatted incorrectly" - exit 99 + fi + + echo "Checking $(echo "$FILES" | wc -l) files..." + clang-format-14 --dry-run --Werror -style=file $FILES + + if [ $? -eq 0 ]; then + echo "SUCCESS: All files are formatted correctly" + else + echo "FAILURE: Some files are formatted incorrectly" + echo "Run 'clang-format-14 -i ' locally to fix" + exit 1 fi