diff options
-rw-r--r-- | .github/workflows/release.yml | 263 |
1 files changed, 121 insertions, 142 deletions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b4b0cd4..3b9656c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,26 +17,23 @@ on: # branches: # - ag/release tags: - - '[0-9]+.[0-9]+.[0-9]+' + - "v[0-9]+.[0-9]+.[0-9]+" jobs: create-release: name: create-release runs-on: ubuntu-latest # env: - # Set to force version number, e.g., when no tag exists. - # RG_VERSION: TEST-0.0.0 + # Set to force version number, e.g., when no tag exists. + # ARTIFACT_VERSION: TEST-0.0.0 steps: - name: Create artifacts directory run: mkdir artifacts - name: Get the release version from the tag - if: env.RG_VERSION == '' + if: env.ARTIFACT_VERSION == '' run: | - # Apparently, this is the right way to get a tag name. Really? - # - # See: https://github.community/t5/GitHub-Actions/How-to-get-just-the-tag-name/m-p/32167/highlight/true#M1027 - echo "RG_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - echo "version is: ${{ env.RG_VERSION }}" + echo "ARTIFACT_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV + echo "version is: ${{ env.ARTIFACT_VERSION }}" - name: Create GitHub release id: release @@ -44,14 +41,14 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tag_name: ${{ env.RG_VERSION }} - release_name: ${{ env.RG_VERSION }} + tag_name: ${{ env.ARTIFACT_VERSION }} + release_name: ${{ env.ARTIFACT_VERSION }} - name: Save release upload URL to artifact run: echo "${{ steps.release.outputs.upload_url }}" > artifacts/release-upload-url - name: Save version number to artifact - run: echo "${{ env.RG_VERSION }}" > artifacts/release-version + run: echo "${{ env.ARTIFACT_VERSION }}" > artifacts/release-version - name: Upload artifacts uses: actions/upload-artifact@v1 @@ -61,7 +58,7 @@ jobs: build-release: name: build-release - needs: ['create-release'] + needs: ["create-release"] runs-on: ${{ matrix.os }} env: # For some builds, we use cross to test on 32-bit and big-endian @@ -73,137 +70,119 @@ jobs: TARGET_DIR: ./target # Emit backtraces on panics. RUST_BACKTRACE: 1 - # Build static releases with PCRE2. - PCRE2_SYS_STATIC: 1 + # The name of the executable to expect + EXE_NAME: dua strategy: matrix: - build: [linux, linux-arm, macos, win-msvc, win-gnu, win32-msvc] + build: [linux, macos, win-msvc, win-gnu, win32-msvc] include: - - build: linux - os: ubuntu-18.04 - rust: nightly - target: x86_64-unknown-linux-musl - - build: linux-arm - os: ubuntu-18.04 - rust: nightly - target: arm-unknown-linux-gnueabihf - - build: macos - os: macos-latest - rust: nightly - target: x86_64-apple-darwin - - build: win-msvc - os: windows-2019 - rust: nightly - target: x86_64-pc-windows-msvc - - build: win-gnu - os: windows-2019 - rust: nightly-x86_64-gnu - target: x86_64-pc-windows-gnu - - build: win32-msvc - os: windows-2019 - rust: nightly - target: i686-pc-windows-msvc + - build: linux + os: ubuntu-18.04 + rust: stable + target: x86_64-unknown-linux-musl + - build: macos + os: macos-latest + rust: stable + target: x86_64-apple-darwin + - build: win-msvc + os: windows-2019 + rust: nightly + target: x86_64-pc-windows-msvc + - build: win-gnu + os: windows-2019 + rust: nightly-x86_64-gnu + target: x86_64-pc-windows-gnu + - build: win32-msvc + os: windows-2019 + rust: nightly + target: i686-pc-windows-msvc steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - - name: Install packages (Ubuntu) - if: matrix.os == 'ubuntu-18.04' - run: | - ci/ubuntu-install-packages - - - name: Install packages (macOS) - if: matrix.os == 'macos-latest' - run: | - ci/macos-install-packages - - - name: Install Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: ${{ matrix.rust }} - profile: minimal - override: true - target: ${{ matrix.target }} - - - name: Use Cross - # if: matrix.os != 'windows-2019' - run: | - cargo install cross - echo "CARGO=cross" >> $GITHUB_ENV - echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV - echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV - - - name: Show command used for Cargo - run: | - echo "cargo command is: ${{ env.CARGO }}" - echo "target flag is: ${{ env.TARGET_FLAGS }}" - echo "target dir is: ${{ env.TARGET_DIR }}" - - - name: Get release download URL - uses: actions/download-artifact@v1 - with: - name: artifacts - path: artifacts - - - name: Set release upload URL and release version - shell: bash - run: | - release_upload_url="$(cat artifacts/release-upload-url)" - echo "RELEASE_UPLOAD_URL=$release_upload_url" >> $GITHUB_ENV - echo "release upload url: $RELEASE_UPLOAD_URL" - release_version="$(cat artifacts/release-version)" - echo "RELEASE_VERSION=$release_version" >> $GITHUB_ENV - echo "release version: $RELEASE_VERSION" - - - name: Build release binary - run: ${{ env.CARGO }} build --verbose --release --features pcre2 ${{ env.TARGET_FLAGS }} - - - name: Strip release binary (linux and macos) - if: matrix.build == 'linux' || matrix.build == 'macos' - run: strip "target/${{ matrix.target }}/release/rg" - - - name: Strip release binary (arm) - if: matrix.build == 'linux-arm' - run: | - docker run --rm -v \ - "$PWD/target:/target:Z" \ - rustembedded/cross:arm-unknown-linux-gnueabihf \ - arm-linux-gnueabihf-strip \ - /target/arm-unknown-linux-gnueabihf/release/rg - - - name: Build archive - shell: bash - run: | - outdir="$(ci/cargo-out-dir "${{ env.TARGET_DIR }}")" - staging="ripgrep-${{ env.RELEASE_VERSION }}-${{ matrix.target }}" - mkdir -p "$staging"/{complete,doc} - - cp {README.md,COPYING,UNLICENSE,LICENSE-MIT} "$staging/" - cp {CHANGELOG.md,FAQ.md,GUIDE.md} "$staging/doc/" - cp "$outdir"/{rg.bash,rg.fish,_rg.ps1} "$staging/complete/" - cp complete/_rg "$staging/complete/" - - if [ "${{ matrix.os }}" = "windows-2019" ]; then - cp "target/${{ matrix.target }}/release/rg.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"/rg.1 "$staging/doc/" - cp "target/${{ matrix.target }}/release/rg" "$staging/" - tar czf "$staging.tar.gz" "$staging" - echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV - fi - - - name: Upload release archive - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ env.RELEASE_UPLOAD_URL }} - asset_path: ${{ env.ASSET }} - asset_name: ${{ env.ASSET }} - asset_content_type: application/octet-stream + - name: Checkout repository + uses: actions/checkout@v2 + with: + fetch-depth: 1 + + - name: Install packages (Ubuntu) + if: matrix.os == 'ubuntu-18.04' + run: | + ci/ubuntu-install-packages + + - name: Install packages (macOS) + if: matrix.os == 'macos-latest' + run: | + ci/macos-install-packages + + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + profile: minimal + override: true + target: ${{ matrix.target }} + + - name: Use Cross + # if: matrix.os != 'windows-2019' + run: | + cargo install cross + echo "CARGO=cross" >> $GITHUB_ENV + echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV + echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV + + - name: Show command used for Cargo + run: | + echo "cargo command is: ${{ env.CARGO }}" + echo "target flag is: ${{ env.TARGET_FLAGS }}" + echo "target dir is: ${{ env.TARGET_DIR }}" + + - name: Get release download URL + uses: actions/download-artifact@v1 + with: + name: artifacts + path: artifacts + + - name: Set release upload URL and release version + shell: bash + run: | + release_upload_url="$(cat artifacts/release-upload-url)" + echo "RELEASE_UPLOAD_URL=$release_upload_url" >> $GITHUB_ENV + echo "release upload url: $RELEASE_UPLOAD_URL" + release_version="$(cat artifacts/release-version)" + echo "RELEASE_VERSION=$release_version" >> $GITHUB_ENV + echo "release version: $RELEASE_VERSION" + + - name: Build release binary + run: ${{ env.CARGO }} build --verbose --release ${{ env.TARGET_FLAGS }} + + - name: Strip release binary (linux and macos) + if: matrix.build == 'linux' || matrix.build == 'macos' + run: strip "target/${{ matrix.target }}/release/${{ env.EXE_NAME }}" + + - name: Build archive + shell: bash + run: | + staging="${{ env.EXE_NAME }}-${{ env.RELEASE_VERSION }}-${{ matrix.target }}" + mkdir -p "$staging"/complete + + cp {README.md,LICENSE,CHANGELOG.md} "$staging/" + + if [ "${{ matrix.os }}" = "windows-2019" ]; then + # cp "target/${{ matrix.target }}/release/${{ env.EXE_NAME }}.exe" "$staging/" + cp "target/release/${{ env.EXE_NAME }}.exe" "$staging/" + 7z a "$staging.zip" "$staging" + echo "ASSET=$staging.zip" >> $GITHUB_ENV + else + cp "target/${{ matrix.target }}/release/${{ env.EXE_NAME }}" "$staging/" + tar czf "$staging.tar.gz" "$staging" + echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV + fi + + - name: Upload release archive + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ env.RELEASE_UPLOAD_URL }} + asset_path: ${{ env.ASSET }} + asset_name: ${{ env.ASSET }} + asset_content_type: application/octet-stream |