name: deploy on: push: tags: - 'v*.*.*' jobs: create-binaries: strategy: matrix: os: [ubuntu-latest, macOS-latest, windows-latest] include: - os: ubuntu-latest target: x86_64-unknown-linux-musl - os: macOS-latest target: x86_64-apple-darwin - os: windows-latest target: x86_64-pc-windows-msvc - os: windows-latest target: i686-pc-windows-msvc runs-on: '${{ matrix.os }}' steps: - uses: actions/checkout@v2 - name: Install Rust uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable target: ${{ matrix.target }} override: true - name: Install musl run: sudo apt-get install musl-tools if: contains(matrix.target, 'linux-musl') - name: Build oxipng run: | cargo build --release --target ${{ matrix.target }} - name: Strip binary run: strip 'target/${{ matrix.target }}/release/oxipng' if: "!contains(matrix.target, 'windows')" - name: Get the version shell: bash id: tagName run: | VERSION=$(cargo pkgid | cut -d# -f2 | cut -d: -f2) echo "::set-output name=tag::$VERSION" - name: Build package id: package shell: bash run: | ARCHIVE_NAME="oxipng-${{ steps.tagName.outputs.tag }}-${{ matrix.target }}" if [[ '${{ matrix.target }}' == *windows* ]]; then ARCHIVE_FILE="${ARCHIVE_NAME}.zip" mv LICENSE LICENSE.txt 7z a "${ARCHIVE_FILE}" "./target/${{ matrix.target }}/release/oxipng.exe" ./CHANGELOG.md ./LICENSE.txt ./README.md echo ::set-output "name=file::${ARCHIVE_FILE}" echo ::set-output "name=name::${ARCHIVE_NAME}.zip" else ARCHIVE_FILE="${ARCHIVE_NAME}.tar.gz" mkdir "/tmp/${ARCHIVE_NAME}" cp README.md CHANGELOG.md LICENSE "target/${{ matrix.target }}/release/oxipng" "/tmp/${ARCHIVE_NAME}" tar -czf "${PWD}/${ARCHIVE_FILE}" -C /tmp/ "${ARCHIVE_NAME}" echo ::set-output "name=file::${ARCHIVE_FILE}" echo ::set-output "name=name::${ARCHIVE_NAME}.tar.gz" fi - name: Upload artifacts uses: actions/upload-artifact@v2 with: name: ${{ steps.package.outputs.name }} path: ${{ steps.package.outputs.file }} deploy: needs: create-binaries runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Get version and release description id: tagName run: | VERSION=$(cargo pkgid | cut -d# -f2 | cut -d: -f2) tail -n +2 CHANGELOG.md | sed -e '/^$/,$d' > CHANGELOG.txt echo "::set-output name=tag::$VERSION" - name: Download artifacts uses: actions/download-artifact@v2 with: path: ./binaries - name: Create a release uses: softprops/action-gh-release@v1 with: name: v${{ steps.tagName.outputs.tag }} body_path: CHANGELOG.txt files: | ./binaries/**/*.zip ./binaries/**/*.tar.gz env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}