# modified from https://github.com/railwayapp/cli/blob/master/.github/workflows/release.yml # just replce every instance of "ENVX" or "envx" with your app name (or leave it, I don't care) name: CD on: push: branches: - main jobs: release-please: runs-on: ubuntu-latest permissions: contents: write pull-requests: write outputs: envx_version: ${{ env.ENVX_VERSION }} build: ${{ env.BUILD }} steps: - name: Release Please uses: GoogleCloudPlatform/release-please-action@v3 id: release with: token: ${{ secrets.GITHUB_TOKEN }} release-type: rust - name: Set SemVer String id: set-semver if: steps.release.outputs.release_created == 'true' run: | echo "ENVX_VERSION=${{ steps.release.outputs.major }}.${{ steps.release.outputs.minor }}.${{ steps.release.outputs.patch }}" >> $GITHUB_ENV echo "BUILD=true" >> $GITHUB_ENV build-release: name: Build Release needs: [release-please] if: needs.release-please.outputs.build == 'true' runs-on: ${{ matrix.os }} continue-on-error: true strategy: matrix: include: - target: x86_64-unknown-linux-gnu os: ubuntu-latest - target: x86_64-unknown-linux-musl os: ubuntu-latest # - target: i686-unknown-linux-musl # os: ubuntu-latest - target: aarch64-unknown-linux-musl os: ubuntu-latest - target: arm-unknown-linux-musleabihf os: ubuntu-latest - target: x86_64-apple-darwin os: macOS-latest - target: aarch64-apple-darwin os: macOS-latest - target: x86_64-pc-windows-msvc os: windows-latest # - target: i686-pc-windows-msvc # os: windows-latest - target: x86_64-pc-windows-gnu os: windows-latest # - target: i686-pc-windows-gnu # os: windows-latest # use-cross: true steps: - name: Checkout repository uses: actions/checkout@v3 with: fetch-depth: 1 - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: stable target: ${{ matrix.target }} profile: minimal override: true # openssl is OPTIONAL - name: Install openssl if: matrix.os == 'ubuntu-latest' run: sudo apt-get install libssl-dev pkg-config -y - name: Build release binary uses: actions-rs/cargo@v1 with: command: build args: --release --locked --target ${{ matrix.target }} use-cross: ${{ matrix.use-cross || matrix.os == 'ubuntu-latest' }} - name: Prepare binaries (zip) [Windows] if: matrix.os == 'windows-latest' run: | cd target/${{ matrix.target }}/release strip envx.exe 7z a ../../../envx-${{ needs.release-please.outputs.envx_version }}-${{ matrix.target }}.zip envx.exe cd - - name: Prepare binaries (tar) [Windows] if: matrix.os == 'windows-latest' run: | cd target/${{ matrix.target }}/release strip envx.exe 7z a -ttar archive.tar envx.exe 7z a -tgzip ../../../envx-${{ needs.release-please.outputs.envx_version }}-${{ matrix.target }}.tar.gz archive.tar cd - - name: Prepare binaries [-linux] if: matrix.os != 'windows-latest' run: | cd target/${{ matrix.target }}/release strip envx || true tar czvf ../../../envx-${{ needs.release-please.outputs.envx_version }}-${{ matrix.target }}.tar.gz envx cd - - name: Upload release archive uses: softprops/action-gh-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v${{ needs.create-release.outputs.envx_version }} files: envx-${{ needs.create-release.outputs.envx_version }}-${{ matrix.target }}* - name: Install cargo-deb if: matrix.target == 'x86_64-unknown-linux-musl' run: cargo install cargo-deb - name: Generate .deb package file if: matrix.target == 'x86_64-unknown-linux-musl' run: cargo deb --target x86_64-unknown-linux-musl --output envx-${{ needs.create-release.outputs.envx_version }}-amd64.deb - name: Upload .deb package file if: matrix.target == 'x86_64-unknown-linux-musl' uses: svenstaro/upload-release-action@v2 with: tag: ${{ needs.create-release.outputs.envx_version }} file: envx-${{ needs.create-release.outputs.envx_version }}-amd64.deb