name: Release on: # schedule: # - cron: '0 0 * * *' # midnight UTC push: tags: - 'v[0-9]+.[0-9]+.[0-9]+' ## - release jobs: dist: name: Dist runs-on: ${{ matrix.os }} strategy: fail-fast: false # don't fail other jobs if one fails matrix: build: [x86_64-linux, aarch64-linux, x86_64-macos, x86_64-windows] #, x86_64-win-gnu, win32-msvc include: - build: x86_64-linux os: ubuntu-20.04 rust: stable target: x86_64-unknown-linux-musl cross: false - build: aarch64-linux os: ubuntu-20.04 rust: stable target: aarch64-unknown-linux-gnu cross: true - build: x86_64-macos os: macos-latest rust: stable target: x86_64-apple-darwin cross: false - build: x86_64-windows os: windows-2019 rust: stable target: x86_64-pc-windows-msvc cross: false # - build: x86_64-win-gnu # os: windows-2019 # rust: stable-x86_64-gnu # target: x86_64-pc-windows-gnu # - build: win32-msvc # os: windows-2019 # rust: stable # target: i686-pc-windows-msvc steps: - name: Checkout sources uses: actions/checkout@v2 with: submodules: true - name: Install ${{ matrix.rust }} toolchain uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: ${{ matrix.rust }} target: ${{ matrix.target }} override: true - name: Run cargo test uses: actions-rs/cargo@v1 with: command: test args: --locked - name: Build release binary uses: actions-rs/cargo@v1 with: use-cross: ${{ matrix.cross }} command: build args: --release --locked --target ${{ matrix.target }} - name: Strip release binary (linux and macos) if: matrix.build == 'x86_64-linux' || matrix.build == 'x86_64-macos' run: strip "target/${{ matrix.target }}/release/hx" - name: Strip release binary (arm) if: matrix.build == 'aarch64-linux' run: | docker run --rm -v \ "$PWD/target:/target:Z" \ rustembedded/cross:${{ matrix.target }} \ aarch64-linux-gnu-strip \ /target/${{ matrix.target }}/release/hx - name: Build archive shell: bash run: | outdir="$(ci/cargo-out-dir "${{ env.TARGET_DIR }}")" staging="helix-${{ env.RELEASE_VERSION }}-${{ matrix.target }}" mkdir -p "$staging"/{complete,doc} cp {README.md,LICENSE} "$staging/" # cp {CHANGELOG.md,FAQ.md,GUIDE.md} "$staging/doc/" # cp "$outdir"/{hx.bash,hx.fish,_hx.ps1} "$staging/complete/" # cp complete/_hx "$staging/complete/" if [ "${{ matrix.os }}" = "windows-2019" ]; then cp "target/${{ matrix.target }}/release/hx.exe" "$staging/" 7z a "$staging.zip" "$staging" echo "ASSET=$staging.zip" >> $GITHUB_ENV else # The man page is only generated on Unix systems. ¯\_(ツ)_/¯ # cp "$outdir"/hx.1 "$staging/doc/" cp "target/${{ matrix.target }}/release/hx" "$staging/" tar czf "$staging.tar.gz" "$staging" echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV fi # package - uses: actions/upload-artifact@v1 with: name: bins-${{ matrix.build }} path: ${{ env.ASSET }} publish: name: Publish needs: [dist] runs-on: ubuntu-latest steps: - name: Checkout sources uses: actions/checkout@v2 with: submodules: false - uses: actions/download-artifact@v2 with: path: dist - run: ls -al ./dist - name: Upload binaries to release uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: dist/* file_glob: true tag: ${{ github.ref }} overwrite: true