name: CD on: release: types: [published] push: tags: - v* permissions: contents: write jobs: build: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - os: macOS-latest target: x86_64-apple-darwin rust_flags: "" features: "" binary_postfix: "" upx_args: --best strip: true - os: ubuntu-latest target: x86_64-unknown-linux-gnu rust_flags: "" features: "" binary_postfix: "" upx_args: --best --lzma strip: true - os: ubuntu-latest target: x86_64-unknown-linux-musl rust_flags: "" features: "" binary: "taskwarrior-tui-x86_64-unknown-linux-musl" upx_args: --best --lzma strip: true - os: windows-latest target: x86_64-pc-windows-gnu rust_flags: -C target-feature=+crt-static features: "" binary_postfix: ".exe" upx_args: -9 strip: false - os: windows-latest target: x86_64-pc-windows-msvc rust_flags: -C target-feature=+crt-static features: "" binary_postfix: ".exe" upx_args: -9 strip: false - os: windows-latest target: i686-pc-windows-msvc rust_flags: -C target-feature=+crt-static features: "" binary_postfix: ".exe" upx_args: -9 strip: false env: RUSTFLAGS: ${{ matrix.rust_flags }} MACOSX_DEPLOYMENT_TARGET: 10.7 steps: - uses: actions/checkout@master - uses: actions-rs/toolchain@v1 with: toolchain: stable target: ${{ matrix.target }} default: true - uses: actions-rs/cargo@v1 with: command: build args: --release ${{matrix.features}} --target=${{ matrix.target }} - name: Compress binaries uses: svenstaro/upx-action@v2 with: files: | target/${{ matrix.target }}/release/taskwarrior-tui${{ matrix.binary_postfix }} args: ${{ matrix.upx_args }} strip: ${{ matrix.strip }} - name: Packaging binary shell: bash run: | cd target/${{ matrix.target }}/release tar czvf taskwarrior-tui-${{ matrix.target }}.tar.gz taskwarrior-tui${{ matrix.binary_postfix }} if [[ ${{ runner.os }} == 'Windows' ]]; then certutil -hashfile taskwarrior-tui-${{ matrix.target }}.tar.gz sha256 | grep -E [A-Fa-f0-9]{64} > taskwarrior-tui-${{ matrix.target }}.sha256 else shasum -a 256 taskwarrior-tui-${{ matrix.target }}.tar.gz > taskwarrior-tui-${{ matrix.target }}.sha256 fi - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: taskwarrior-tui-${{ matrix.target }} path: target/${{ matrix.target }}/release/taskwarrior-tui-${{ matrix.target }}.tar.gz - name: Releasing assets if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v2 with: files: | target/${{ matrix.target }}/release/taskwarrior-tui-${{ matrix.target }}.tar.gz target/${{ matrix.target }}/release/taskwarrior-tui-${{ matrix.target }}.sha256 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} homebrew: name: Bump Homebrew formula runs-on: macos-latest steps: - name: Update Homebrew formula if: startsWith(github.ref, 'refs/tags/') uses: dawidd6/action-homebrew-bump-formula@v3 with: token: ${{secrets.HOMEBREW_TOKEN}} formula: taskwarrior-tui deb: name: Publish deb package runs-on: ubuntu-latest steps: - name: Check out Git repository uses: actions/checkout@v4 - uses: actions-rs/cargo@v1 with: command: build args: --release - name: Install cargo-deb run: cargo install cargo-deb - name: Build deb package run: cargo deb -p taskwarrior-tui -o target/debian/taskwarrior-tui.deb - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: taskwarrior-tui-deb path: target/debian/taskwarrior-tui.deb - name: Releasing assets if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v2 with: files: | target/debian/*.deb env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} rpm: name: Publish rpm package runs-on: ubuntu-latest steps: - name: Check out Git repository uses: actions/checkout@v4 - uses: actions-rs/cargo@v1 with: command: build args: --release - name: Install rpm run: sudo apt-get install rpm - name: Install cargo-rpm run: cargo install cargo-rpm - name: Build rpm package run: cargo rpm build - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: taskwarrior-tui-rpm path: target/release/rpmbuild/RPMS/x86_64/taskwarrior-tui-*.x86_64.rpm - name: Releasing assets if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v2 with: files: | target/release/rpmbuild/RPMS/x86_64/taskwarrior-tui-*.x86_64.rpm env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} aur: name: Publish aur package runs-on: ubuntu-latest steps: - name: Check out Git repository uses: actions/checkout@v4 - uses: actions-rs/cargo@v1 with: command: build args: --release - name: Install cargo-aur run: cargo install cargo-aur - name: Build aur package run: cargo aur grcov: runs-on: ubuntu-latest env: TASKRC: taskwarrior-testdata/.taskrc TASKDATA: taskwarrior-testdata/.task RUST_BACKTRACE: full steps: - uses: actions/checkout@v4 - name: Install toolchain uses: actions-rs/toolchain@v1 with: toolchain: nightly override: true profile: minimal - run: sudo apt-get update - name: 'Install Taskwarrior' uses: ./.github/actions/install-taskwarrior with: secret_gh_token: ${{ secrets.GITHUB_TOKEN }} - run: | task --version - uses: actions/checkout@v4 with: repository: kdheepak/taskwarrior-testdata path: taskwarrior-testdata - run: | # prepare taskwarrior, initial setup task rc.confirmation=off || echo 0 - name: Execute tests uses: actions-rs/cargo@v1 with: command: test args: --all env: CARGO_INCREMENTAL: 0 RUSTFLAGS: "-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests" # Note that `actions-rs/grcov` Action can install `grcov` too, # but can't use faster installation methods yet. # As a temporary experiment `actions-rs/install` Action plugged in here. # Consider **NOT** to copy that into your workflow, # but use `actions-rs/grcov` only - name: Pre-installing grcov uses: actions-rs/install@v0.1 with: crate: grcov use-tool-cache: true - name: Gather coverage data id: coverage uses: actions-rs/grcov@v0.1 - name: Coveralls upload uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} parallel: true path-to-lcov: ${{ steps.coverage.outputs.report }} grcov_finalize: runs-on: ubuntu-latest needs: grcov steps: - name: Coveralls finalization uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} parallel-finished: true