name: Create Release Draft on: push: tags: ['[0-9]+.[0-9]+.[0-9]+*'] jobs: linux: name: Build Linux runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v2 - name: Install libxcb run: sudo apt-get install libxcb-composite0-dev - name: Set up cargo uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Build uses: actions-rs/cargo@v1 with: command: build args: --release --all --features=stable - name: Create output directory run: mkdir output - name: Copy files to output run: | cp target/release/nu target/release/nu_plugin_* output/ cp README.build.txt output/README.txt rm output/*.d rm output/nu_plugin_core_* rm output/nu_plugin_stable_* # Note: If OpenSSL changes, this path will need to be updated - name: Copy OpenSSL to output run: cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 output/ - name: Upload artifact uses: actions/upload-artifact@v2 with: name: linux path: output/* macos: name: Build macOS runs-on: macos-latest steps: - name: Check out code uses: actions/checkout@v2 - name: Set up cargo uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Build uses: actions-rs/cargo@v1 with: command: build args: --release --all --features=stable - name: Create output directory run: mkdir output - name: Copy files to output run: | cp target/release/nu target/release/nu_plugin_* output/ cp README.build.txt output/README.txt rm output/*.d rm output/nu_plugin_core_* rm output/nu_plugin_stable_* - name: Upload artifact uses: actions/upload-artifact@v2 with: name: macos path: output/* windows: name: Build Windows runs-on: windows-latest steps: - name: Check out code uses: actions/checkout@v2 - name: Set up cargo uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - name: Add cargo-wix subcommand uses: actions-rs/cargo@v1 with: command: install args: cargo-wix - name: Build uses: actions-rs/cargo@v1 with: command: build args: --release --all --features=stable - name: Create output directory run: mkdir output - name: Download Less Binary run: Invoke-WebRequest -Uri "https://github.com/jftuga/less-Windows/releases/download/less-v562.1/less.exe" -OutFile "target\release\less.exe" - name: Copy files to output run: | cp target\release\nu.exe output\ rm target\release\nu_plugin_core_*.exe rm target\release\nu_plugin_stable_*.exe cp target\release\nu_plugin_*.exe output\ cp README.build.txt output\README.txt cp target\release\less.exe output\ # Note: If the version of `less.exe` needs to be changed, update this URL # Similarly, if `less.exe` is checked into the repo, copy from the local path here # moved this stuff down to create wix after we download less - name: Create msi with wix uses: actions-rs/cargo@v1 with: command: wix args: --no-build --nocapture --output target\wix\nushell-windows.msi - name: Upload installer uses: actions/upload-artifact@v2 with: name: windows-installer path: target\wix\nushell-windows.msi - name: Upload artifact uses: actions/upload-artifact@v2 with: name: windows path: output\* release: name: Publish Release runs-on: ubuntu-latest needs: - linux - macos - windows steps: - name: Check out code uses: actions/checkout@v2 - name: Determine Release Info id: info env: GITHUB_REF: ${{ github.ref }} run: | VERSION=${GITHUB_REF##*/} MAJOR=${VERSION%%.*} MINOR=${VERSION%.*} MINOR=${MINOR#*.} PATCH=${VERSION##*.} echo "::set-output name=version::${VERSION}" echo "::set-output name=linuxdir::nu_${MAJOR}_${MINOR}_${PATCH}_linux" echo "::set-output name=macosdir::nu_${MAJOR}_${MINOR}_${PATCH}_macOS" echo "::set-output name=windowsdir::nu_${MAJOR}_${MINOR}_${PATCH}_windows" echo "::set-output name=innerdir::nushell-${VERSION}" - name: Create Release Draft id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.ref }} release_name: ${{ steps.info.outputs.version }} Release draft: true - name: Create Linux Directory run: mkdir -p ${{ steps.info.outputs.linuxdir }}/${{ steps.info.outputs.innerdir }} - name: Download Linux Artifacts uses: actions/download-artifact@v2 with: name: linux path: ${{ steps.info.outputs.linuxdir }}/${{ steps.info.outputs.innerdir }} - name: Restore Linux File Modes run: | chmod 755 ${{ steps.info.outputs.linuxdir }}/${{ steps.info.outputs.innerdir }}/nu* chmod 755 ${{ steps.info.outputs.linuxdir }}/${{ steps.info.outputs.innerdir }}/libssl* - name: Create Linux tarball run: tar -zcvf ${{ steps.info.outputs.linuxdir }}.tar.gz ${{ steps.info.outputs.linuxdir }} - name: Upload Linux Artifact uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./${{ steps.info.outputs.linuxdir }}.tar.gz asset_name: ${{ steps.info.outputs.linuxdir }}.tar.gz asset_content_type: application/gzip - name: Create macOS Directory run: mkdir -p ${{ steps.info.outputs.macosdir }}/${{ steps.info.outputs.innerdir }} - name: Download macOS Artifacts uses: actions/download-artifact@v2 with: name: macos path: ${{ steps.info.outputs.macosdir }}/${{ steps.info.outputs.innerdir }} - name: Restore macOS File Modes run: chmod 755 ${{ steps.info.outputs.macosdir }}/${{ steps.info.outputs.innerdir }}/nu* - name: Create macOS Archive run: zip -r ${{ steps.info.outputs.macosdir }}.zip ${{ steps.info.outputs.macosdir }} - name: Upload macOS Artifact uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./${{ steps.info.outputs.macosdir }}.zip asset_name: ${{ steps.info.outputs.macosdir }}.zip asset_content_type: application/zip - name: Create Windows Directory run: mkdir -p ${{ steps.info.outputs.windowsdir }}/${{ steps.info.outputs.innerdir }} - name: Download Windows installer uses: actions/download-artifact@v2 with: name: windows-installer path: ${{ steps.info.outputs.windowsdir }}/${{ steps.info.outputs.innerdir }} - name: Download Windows zip uses: actions/download-artifact@v2 with: name: windows-zip path: ${{ steps.info.outputs.windowsdir }}/${{ steps.info.outputs.innerdir }} # TODO: Remove Show - name: Show Windows Artifacts run: ls -la ${{ steps.info.outputs.windowsdir }}/${{ steps.info.outputs.innerdir }} - name: Create Windows Archive run: zip -r ${{ steps.info.outputs.windowsdir }}.zip ${{ steps.info.outputs.windowsdir }} - name: Upload Windows Artifact uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./${{ steps.info.outputs.windowsdir }}.zip asset_name: ${{ steps.info.outputs.windowsdir }}.zip asset_content_type: application/zip - name: Upload Windows installer uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./release/nushell-windows.msi asset_name: nushell-${{ steps.release_info.outputs.version }}-windows-x86_64.msi asset_content_type: applictaion/x-msi - name: Upload Windows zip uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./release/nushell-windows.zip asset_name: nushell-${{ steps.release_info.outputs.version }}-windows.zip asset_content_type: application/zip