diff --git a/.github/workflows/native.yaml b/.github/workflows/native.yaml index 73f68d8f..ac878326 100644 --- a/.github/workflows/native.yaml +++ b/.github/workflows/native.yaml @@ -1,369 +1,18 @@ name: Native CI/CD on: - push: - paths: - - .github/workflows/native.yaml - - native/** - tags: - - v* - branches-ignore: - - crowdin-* - pull_request: - paths: - - .github/workflows/native.yaml - - native/** + - push defaults: run: shell: bash jobs: - clippy: - name: Clippy (${{ matrix.os }}) - runs-on: ${{ matrix.os }} - - defaults: - run: - working-directory: native - shell: bash - - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-latest - - os: windows-latest - - os: windows-latest - flags: --features portable - portable: true - - os: macos-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Configure Rust and Clippy - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - toolchain: stable - components: clippy - cache: false - rustflags: "" - - - name: Configure cache - uses: Swatinem/rust-cache@v2 - with: - workspaces: native - cache-on-failure: true - cache-all-crates: true - key: ${{ matrix.portable == true }} - - - name: Run Clippy - run: cargo clippy --all-targets ${{ matrix.flags }} -- -D warnings - - rustfmt: - name: Rustfmt - runs-on: ubuntu-latest - - defaults: - run: - working-directory: native - shell: bash - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Configure Rust and Rustfmt - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - toolchain: nightly - components: rustfmt - cache: false - rustflags: "" - - - name: Configure cache - uses: Swatinem/rust-cache@v2 - with: - workspaces: native - cache-on-failure: true - cache-all-crates: true - - - name: Run Rustfmt - run: cargo fmt --all -- --check - - build: - name: Build (${{ matrix.target }}) - runs-on: ${{ matrix.os }} - - defaults: - run: - working-directory: native - shell: bash - - strategy: - fail-fast: false - matrix: - include: - # Normal builds for Linux - - os: ubuntu-latest - target: x86_64-unknown-linux-gnu - flags: --features static - - os: ubuntu-latest - target: i686-unknown-linux-gnu - flags: --features static - - os: ubuntu-latest - target: aarch64-unknown-linux-gnu - flags: --features static - - os: ubuntu-latest - target: armv7-unknown-linux-gnueabihf - flags: --features static - # Normal builds for Windows - - os: windows-latest - target: x86_64-pc-windows-msvc - - os: windows-latest - target: i686-pc-windows-msvc - # Portable builds for Windows - - os: windows-latest - target: x86_64-pc-windows-msvc - flags: --features portable - portable: true - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Configure Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - with: - toolchain: stable - target: ${{ matrix.target }} - cache: false - rustflags: "" - - - name: Configure cache - uses: Swatinem/rust-cache@v2 - with: - workspaces: | - native - native/packages/paf/PWAsForFirefoxHelpers - cache-on-failure: true - cache-all-crates: true - key: ${{ matrix.target }}-${{ matrix.portable == true }} - - - name: Install cross (Linux) - if: matrix.os == 'ubuntu-latest' - run: | - # Use cross 0.2.4 for now because newer versions require too new glibc versions - # In the future, we should update cross and configure zig to link to older glibc - cargo install cross --git https://github.com/cross-rs/cross.git --rev 4645d937bdae6952d9df38eff3ecb91fd719c3bd - - - name: Install Cargo DEB (Linux) - if: matrix.os == 'ubuntu-latest' - run: | - cargo install cargo-deb --git https://github.com/kornelski/cargo-deb.git --rev 423d53ed8f0559bc339013aa7e1a3f2fde493c0e - - - name: Install Cargo RPM (Linux) - if: matrix.os == 'ubuntu-latest' - run: | - cargo install cargo-rpm --git https://github.com/filips123/cargo-rpm.git --rev cf5e33de8e8dbb80103f81afc8a2bcd471ef6d31 - - - name: Install Cargo WiX (Windows) - if: matrix.os == 'windows-latest' && matrix.portable != true - run: | - echo "${WIX}bin" >> $GITHUB_PATH - cargo install cargo-wix --git https://github.com/volks73/cargo-wix.git --rev 032be8310f9aa9684e9524db54632792a9d85e28 - - - name: Install PortableApps.com (Windows) - if: matrix.os == 'windows-latest' && matrix.portable == true - run: | - mkdir $TEMP/PortableAppsLauncher && cd $TEMP/PortableAppsLauncher - curl "https://download2.portableapps.com/portableapps/PortableApps.comLauncher/PortableApps.comLauncher_2.2.8.paf.exe" -o PortableAppsLauncher.paf.exe - 7z x -y PortableAppsLauncher.paf.exe - echo $TEMP/PortableAppsLauncher >> $GITHUB_PATH - - mkdir $TEMP/PortableAppsInstaller && cd $TEMP/PortableAppsInstaller - curl "https://download2.portableapps.com/portableapps/PortableApps.comInstaller/PortableApps.comInstaller_3.8.8.paf.exe" -o PortableAppsInstaller.paf.exe - 7z x -y PortableAppsInstaller.paf.exe - echo $TEMP/PortableAppsInstaller >> $GITHUB_PATH - - - name: Configure Linux builds - if: matrix.os == 'ubuntu-latest' - run: | - # Replace completions paths with the correct paths for cross-compilation - sed -i 's/..\/target\/release\/completions\//..\/target\/${{ matrix.target }}\/release\/completions\//g' Cargo.toml - - # Pin cross images to 0.2.4 as newer versions require too new glibc versions - printf '[target.x86_64-unknown-linux-gnu]\nimage = "ghcr.io/cross-rs/x86_64-unknown-linux-gnu:0.2.4"\n\n' >> Cross.toml - printf '[target.i686-unknown-linux-gnu]\nimage = "ghcr.io/cross-rs/i686-unknown-linux-gnu:0.2.4"\n\n' >> Cross.toml - printf '[target.aarch64-unknown-linux-gnu]\nimage = "ghcr.io/cross-rs/aarch64-unknown-linux-gnu:0.2.4"\n\n' >> Cross.toml - printf '[target.armv7-unknown-linux-gnueabihf]\nimage = "ghcr.io/cross-rs/armv7-unknown-linux-gnueabihf:0.2.4"\n\n' >> Cross.toml - - # Manually specify minimum libc6 version as cargo-deb cannot determine it correctly when using cross - sed -i '/\[package.metadata.deb\]/a depends = "libc6 (>= 2.18)"' Cargo.toml - - # Configure binutils for ARM targets - if [[ ${{ matrix.target }} == aarch64-* ]] || [[ ${{ matrix.target }} == armv7-* ]] - then - sudo apt-get update - sudo apt-get install binutils-aarch64-linux-gnu binutils-arm-linux-gnueabihf - - mkdir -p .cargo && touch .cargo/config - printf '[target.aarch64-unknown-linux-gnu]\nstrip = { path = "aarch64-linux-gnu-strip" }\nobjcopy = { path = "aarch64-linux-gnu-objcopy" }\n\n' >> .cargo/config - printf '[target.armv7-unknown-linux-gnueabihf]\nstrip = { path = "arm-linux-gnueabihf-strip" }\nobjcopy = { path = "arm-linux-gnueabihf-objcopy" }\n' >> .cargo/config - fi - - - name: Set the version - run: | - if [[ $GITHUB_REF == refs/tags/v* ]] - then - VERSION=${GITHUB_REF/refs\/tags\/v} - sed -i "s/version = \"0.0.0\"/version = \"$VERSION\"/g" Cargo.toml - sed -i "s/DISTRIBUTION_VERSION = '0.0.0'/DISTRIBUTION_VERSION = '$VERSION'/g" userchrome/profile/chrome/pwa/chrome.jsm - fi - - - name: Build the project - run: | - [[ ${{ matrix.os }} == ubuntu-latest ]] && CARGO="cross" || CARGO="cargo" - $CARGO build --release --target ${{ matrix.target }} ${{ matrix.flags }} - - - name: Package shell completions - if: matrix.target == 'x86_64-unknown-linux-gnu' - run: | - zip -rj target/completions.zip target/x86_64-unknown-linux-gnu/release/completions/* - - - name: Package DEB (Linux) - if: matrix.os == 'ubuntu-latest' - run: | - cargo deb --verbose --no-build --target ${{ matrix.target }} - mkdir -p target/debian/ && cp -r target/${{ matrix.target }}/debian/*.deb target/debian/ - - - name: Package RPM (Linux) - if: matrix.os == 'ubuntu-latest' - run: | - cargo rpm build --verbose --no-cargo-build --target ${{ matrix.target }} - - - name: Package MSI (Windows) - if: matrix.os == 'windows-latest' && matrix.portable != true - run: | - heat dir userchrome -o packages/wix/userchrome.wxs -scom -srd -sreg -gg -cg UserChrome -dr UserChromeDir -var wix.UserChromeSource - cargo wix --verbose --no-build --nocapture --target ${{ matrix.target }} - - - name: Package PAF (Windows) - if: matrix.os == 'windows-latest' && matrix.portable == true - run: | - # Build helper executables - echo "::group::Building helpers" - (cd packages/paf/PWAsForFirefoxHelpers && cargo build --release --target ${{ matrix.target }}) - echo "::endgroup::" - - # Copy files to the portable app package - echo "::group::Copying files to the package" - mkdir -p packages/paf/PWAsForFirefoxPortable/App/PWAsForFirefox/ - cp target/${{ matrix.target }}/release/firefoxpwa.exe packages/paf/PWAsForFirefoxPortable/App/PWAsForFirefox/ - cp target/${{ matrix.target }}/release/firefoxpwa-connector.exe packages/paf/PWAsForFirefoxPortable/App/PWAsForFirefox/ - cp packages/paf/PWAsForFirefoxHelpers/target/${{ matrix.target }}/release/firefoxpwa-background.exe packages/paf/PWAsForFirefoxPortable/App/PWAsForFirefox/ - cp manifests/windows.json packages/paf/PWAsForFirefoxPortable/App/PWAsForFirefox/firefoxpwa.json - cp -r userchrome/ packages/paf/PWAsForFirefoxPortable/App/PWAsForFirefox/ - echo "::endgroup::" - - # Set the package version - echo "::group::Setting the package versions" - if [[ $GITHUB_REF == refs/tags/v* ]] - then - VERSION=${GITHUB_REF/refs\/tags\/v} - sed -i "s/PackageVersion=0.0.0.0/PackageVersion=$VERSION.0/g" packages/paf/PWAsForFirefoxPortable/App/AppInfo/appinfo.ini - sed -i "s/DisplayVersion=0.0.0/DisplayVersion=$VERSION/g" packages/paf/PWAsForFirefoxPortable/App/AppInfo/appinfo.ini - else - VERSION=0.0.0 - fi - echo "::endgroup::" - - # Generate the launcher and installer - echo "::group::Generating the launcher and installer" - cd packages/paf - PortableApps.comLauncherGenerator.exe $(cygpath -d $(realpath PWAsForFirefoxPortable)) - PortableApps.comInstaller.exe $(cygpath -d $(realpath PWAsForFirefoxPortable)) - echo "::endgroup::" - - # Rename the installer - echo "::group::Renaming the installer" - mkdir -p ../../target/paf/ - mv PWAsForFirefoxPortable_*.paf.exe ../../target/paf/firefoxpwa_${VERSION}_online.paf.exe - echo "::endgroup::" - - - name: Upload artifacts - if: success() || failure() - uses: actions/upload-artifact@v3 - with: - path: | - native/target/completions.zip - native/target/debian/*.deb - native/target/rpm/*.rpm - native/target/wix/*.msi - native/target/paf/*.paf.exe - - release-github: - name: Release on GitHub - if: startsWith(github.ref, 'refs/tags/v') - runs-on: ubuntu-latest - - needs: - - clippy - - rustfmt - - build - - steps: - - name: Download artifacts - uses: actions/download-artifact@v3 - - - name: Upload artifacts to GitHub Release - uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 - with: - fail_on_unmatched_files: true - files: | - artifact/completions.zip - artifact/debian/*.deb - artifact/rpm/*.rpm - artifact/wix/*.msi - artifact/paf/*.paf.exe - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - release-packagecloud: - name: Release on packagecloud.io - if: startsWith(github.ref, 'refs/tags/v') - runs-on: ubuntu-latest - - needs: - - clippy - - rustfmt - - build - - steps: - - name: Download artifacts - uses: actions/download-artifact@v3 - - - name: Install packagecloud.io CLI - run: sudo gem install package_cloud - - - name: Upload artifacts to packagecloud.io repositories - env: - PACKAGECLOUD_TOKEN: ${{ secrets.PACKAGECLOUD_TOKEN }} - run: | - package_cloud push filips/FirefoxPWA/any/any artifact/debian/*.deb - package_cloud push filips/FirefoxPWA/rpm_any/rpm_any artifact/rpm/*.rpm - release-aur: name: Release on Arch User Repository - if: startsWith(github.ref, 'refs/tags/v') runs-on: ubuntu-latest container: archlinux - needs: - - release-github - steps: - name: Checkout repository uses: actions/checkout@v4 @@ -416,175 +65,3 @@ jobs: commit_email: ${{ secrets.AUR_EMAIL }} ssh_private_key: ${{ secrets.AUR_PRIVATE_KEY }} ssh_keyscan_types: rsa,dsa,ecdsa,ed25519 - - release-gentoo: - name: Release on Gentoo GURU - if: startsWith(github.ref, 'refs/tags/v') - runs-on: ubuntu-latest - container: ghcr.io/filips123/gentoo-pycargoebuild - - needs: - - release-github - - steps: - - name: Checkout project repository - uses: actions/checkout@v4 - - - name: Checkout GURU repository - uses: actions/checkout@v4 - with: - repository: gentoo/guru - path: tmp/guru - - - name: Configure cache - run: echo "CACHE_ID=$(date --utc '+%Y-%V')" >> $GITHUB_ENV - - - name: Configure cache - uses: actions/cache@v3 - with: - path: /var/cache/distfiles - key: gentoo-distfiles-${{ env.CACHE_ID }} - restore-keys: gentoo-distfiles- - - - name: Import GPG key - run: echo "${{ secrets.GENTOO_KEY_PRIVATE }}" | gpg --import --batch - - - name: Prepare Git user - working-directory: tmp/guru - run: | - git config --local user.name "${{ secrets.GENTOO_USERNAME }}" - git config --local user.email "${{ secrets.GENTOO_EMAIL }}" - git config --local user.signingkey "${{ secrets.GENTOO_KEY_ID }}" - - - name: Prepare Git settings - working-directory: tmp/guru - run: | - git config --local pull.ff only - git config --local pull.rebase merges - git config --local commit.gpgsign 1 - - - name: Set the version - run: | - VERSION=${GITHUB_REF/refs\/tags\/v} - echo "VERSION=$VERSION" >> $GITHUB_ENV - - - name: Generate updated package - working-directory: tmp/guru/www-plugins/firefoxpwa - run: | - echo "::group::Updating the package ebuild" - cp "$GITHUB_WORKSPACE/native/packages/gentoo/firefoxpwa.ebuild" "firefoxpwa-$VERSION.ebuild" - pycargoebuild -i "firefoxpwa-$VERSION.ebuild" "$GITHUB_WORKSPACE/native" - echo "::endgroup::" - - echo "::group::Updating the package manifest" - ebuild "firefoxpwa-$VERSION.ebuild" manifest - echo "::endgroup::" - - - name: Commit updated package - working-directory: tmp/guru/www-plugins/firefoxpwa - run: | - git add -A - pkgdev commit --signoff - - - name: Scan updated package - working-directory: tmp/guru/www-plugins/firefoxpwa - run: | - git remote set-head origin master - pkgcheck scan --net --commits - - - name: Push updated package - uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 - with: - token: ${{ secrets.GH_TOKEN }} - push-to-fork: filips123/gentoo-guru - path: tmp/guru - branch: "add-firefoxpwa-${{ env.VERSION }}" - title: "www-plugins/firefoxpwa: add ${{ env.VERSION }}" - body: "" - - release-winget: - name: Release on Windows Package Manager - if: startsWith(github.ref, 'refs/tags/v') - runs-on: windows-latest - - needs: - - release-github - - steps: - - name: Install winget-create - shell: powershell - run: iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe - - - name: Prepare Git user - run: | - git config --global user.name "${{ secrets.GH_USERNAME }}" - git config --global user.email "${{ secrets.GH_EMAIL }}" - - - name: Update and release package manifest - run: | - VERSION=${GITHUB_REF/refs\/tags\/v} - INSTALLER_64BIT="https://github.com/filips123/PWAsForFirefox/releases/download/v$VERSION/firefoxpwa-$VERSION-x86_64.msi" - INSTALLER_32BIT="https://github.com/filips123/PWAsForFirefox/releases/download/v$VERSION/firefoxpwa-$VERSION-x86.msi" - ./wingetcreate.exe update -s filips.FirefoxPWA -u $INSTALLER_64BIT $INSTALLER_32BIT -v $VERSION -t ${{ secrets.GH_TOKEN }} - - release-chocolatey: - name: Release on Chocolatey - if: startsWith(github.ref, 'refs/tags/v') - runs-on: windows-latest - - needs: - - release-github - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Download artifacts - uses: actions/download-artifact@v3 - - - name: Calculate version and installer checksums - run: | - echo "::group::Copying installers to the package" - cp -R artifact/wix/*.msi native/packages/choco/tools/ - echo "::endgroup::" - - echo "::group::Setting the package version" - VERSION=${GITHUB_REF/refs\/tags\/v} - sed -i "s/{{PackageVersion}}/$VERSION/g" native/packages/choco/firefoxpwa.nuspec - echo "::endgroup::" - - echo "::group::Updating installer checksums" - cd native/packages/choco/tools/ - echo "$(sha256sum *.msi --tag)" >> ../legal/VERIFICATION.txt - echo "::endgroup::" - - - name: Prepare Chocolatey package - run: | - cd native/packages/choco/ - choco pack - - - name: Release Chocolatey package - run: choco push native/packages/choco/*.nupkg --source https://push.chocolatey.org/ --key ${{secrets.CHOCO_TOKEN}} - -# release-homebrew: -# name: Release on Homebrew -# if: startsWith(github.ref, 'refs/tags/v') -# runs-on: macos-latest -# -# needs: -# - release-github -# -# steps: -# - name: Prepare Git user -# run: | -# git config --global user.name "${{ secrets.GH_USERNAME }}" -# git config --global user.email "${{ secrets.GH_EMAIL }}" -# -# - name: Update and release Homebrew formula -# env: -# HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.GH_TOKEN }} -# run: | -# VERSION=${GITHUB_REF/refs\/tags\/v} -# brew update -# (cd "$(brew --repository homebrew/core)" && git pull origin master --ff-only) -# brew bump-formula-pr --no-browse --strict --online --version $VERSION firefoxpwa