name: release
on:
+ schedule:
+ - cron: '0 0 * * *' # midnight UTC
+
push:
branches:
- - release
+ - release
+ - nightly
+
+env:
+ CARGO_INCREMENTAL: 0
+ CARGO_NET_RETRY: 10
+ RUSTFLAGS: -D warnings
+ RUSTUP_MAX_RETRIES: 10
jobs:
- build-server:
- name: build-server
+ dist:
+ name: dist
runs-on: ${{ matrix.os }}
strategy:
matrix:
- os: [ubuntu-latest, windows-latest, macos-latest]
- env:
- RUSTFLAGS: -D warnings
- CARGO_INCREMENTAL: 0
- RUSTUP_MAX_RETRIES: 10
- CARGO_NET_RETRY: 10
- steps:
+ os: [ubuntu-16.04, windows-latest, macos-latest]
- - name: Checkout repository
- uses: actions/checkout@v1
-
- # We need to disable the existing toolchain to avoid updating rust-docs
- # which takes a long time. The fastest way to do this is to rename the
- # existing folder, as deleting it takes about as much time as not doing
- # anything and just updating rust-docs.
- - name: Rename existing rust toolchain (Windows)
- if: matrix.os == 'windows-latest'
- run: Rename-Item C:\Users\runneradmin\.rustup\toolchains\stable-x86_64-pc-windows-msvc C:\Users\runneradmin\.rustup\toolchains\stable-x86_64-pc-windows-msvc.old
-
- - name: Install Rust toolchain
- uses: actions-rs/toolchain@v1
- with:
- toolchain: stable
- profile: minimal
- target: x86_64-unknown-linux-musl
- override: true
-
- - name: Build
- if: matrix.os == 'ubuntu-latest'
- uses: actions-rs/cargo@v1
- env:
- CC: clang
- with:
- command: build
- args: --package ra_lsp_server --bin ra_lsp_server --release --target x86_64-unknown-linux-musl
-
- - name: Build
- if: matrix.os != 'ubuntu-latest'
- uses: actions-rs/cargo@v1
- with:
- command: build
- args: --package ra_lsp_server --bin ra_lsp_server --release
-
- - name: Create distribution dir
- run: mkdir ./dist
-
- - name: Copy binary
- if: matrix.os == 'ubuntu-latest'
- run: cp ./target/x86_64-unknown-linux-musl/release/ra_lsp_server ./dist/ra_lsp_server-linux && strip ./dist/ra_lsp_server-linux
-
- - name: Copy binary
- if: matrix.os == 'macos-latest'
- run: cp ./target/release/ra_lsp_server ./dist/ra_lsp_server-mac
-
- - name: Copy binary
- if: matrix.os == 'windows-latest'
- run: copy ./target/release/ra_lsp_server.exe ./dist/ra_lsp_server-windows.exe
-
- - name: Upload artifacts
- uses: actions/upload-artifact@v1
- with:
- name: server-${{ matrix.os }}
- path: ./dist
-
- build-clients:
- name: build-clients
- runs-on: ubuntu-latest
steps:
- - name: Checkout repository
- uses: actions/checkout@v1
-
- - name: Install Nodejs
- uses: actions/setup-node@v1
- with:
- node-version: 12.x
-
- - run: npm ci
- working-directory: ./editors/code
-
- - run: npm run package --scripts-prepend-node-path
- working-directory: ./editors/code
-
- - name: Copy vscode extension
- run: mkdir -p ./dist/code && cp ./editors/code/*.vsix ./dist/
-
- - name: Upload artifacts
- uses: actions/upload-artifact@v1
- with:
- name: editor-plugins
- path: ./dist
-
- make-release:
- name: make-release
- runs-on: ubuntu-latest
- needs: ['build-server', 'build-clients']
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ # We need to disable the existing toolchain to avoid updating rust-docs
+ # which takes a long time. The fastest way to do this is to rename the
+ # existing folder, as deleting it takes about as much time as not doing
+ # anything and just updating rust-docs.
+ - name: Rename existing rust toolchain (Windows)
+ if: matrix.os == 'windows-latest'
+ run: Rename-Item C:\Users\runneradmin\.rustup\toolchains\stable-x86_64-pc-windows-msvc C:\Users\runneradmin\.rustup\toolchains\stable-x86_64-pc-windows-msvc.old
+
+ - name: Install Rust toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ profile: minimal
+ override: true
+
+ - name: Install Nodejs
+ if: matrix.os == 'ubuntu-16.04'
+ uses: actions/setup-node@v1
+ with:
+ node-version: 12.x
+
+ - name: Dist
+ if: matrix.os == 'ubuntu-16.04' && github.ref == 'refs/heads/release'
+ run: cargo xtask dist --client 0.2.$GITHUB_RUN_NUMBER
+
+ - name: Dist
+ if: matrix.os == 'ubuntu-16.04' && github.ref != 'refs/heads/release'
+ run: cargo xtask dist --nightly --client 0.3.$GITHUB_RUN_NUMBER-nightly
+
+ - name: Dist
+ if: matrix.os != 'ubuntu-16.04'
+ run: cargo xtask dist
+
+ - name: Nightly analysis-stats check
+ if: matrix.os == 'ubuntu-16.04' && github.ref != 'refs/heads/release'
+ run: ./dist/rust-analyzer-linux analysis-stats .
+
+ - name: Upload artifacts
+ uses: actions/upload-artifact@v1
+ with:
+ name: dist-${{ matrix.os }}
+ path: ./dist
+
+ publish:
+ name: publish
+ runs-on: ubuntu-16.04
+ needs: ['dist']
steps:
- - name: Install Nodejs
- uses: actions/setup-node@v1
- with:
- node-version: 12.x
-
- - run: echo "::set-env name=TAG::$(date --iso)"
- - run: 'echo "TAG: $TAG"'
-
- - name: Checkout repository
- uses: actions/checkout@v1
-
- - uses: actions/download-artifact@v1
- with:
- name: editor-plugins
- path: dist
- - uses: actions/download-artifact@v1
- with:
- name: server-macos-latest
- path: dist
- - uses: actions/download-artifact@v1
- with:
- name: server-ubuntu-latest
- path: dist
- - uses: actions/download-artifact@v1
- with:
- name: server-windows-latest
- path: dist
- - run: ls -all ./dist
-
- - name: Create Release
- id: create_release
- # uses: actions/create-release@v1
- # https://github.com/actions/create-release/pull/32
- uses: fleskesvor/create-release@1a72e235c178bf2ae6c51a8ae36febc24568c5fe
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- tag_name: ${{ env.TAG }}
- release_name: ${{ env.TAG }}
- draft: false
- prerelease: false
-
- - uses: actions/upload-release-asset@v1.0.1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- upload_url: ${{ steps.create_release.outputs.upload_url }}
- asset_path: ./dist/ra_lsp_server-linux
- asset_name: ra_lsp_server-linux
- asset_content_type: application/octet-stream
-
- - uses: actions/upload-release-asset@v1.0.1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- upload_url: ${{ steps.create_release.outputs.upload_url }}
- asset_path: ./dist/ra_lsp_server-mac
- asset_name: ra_lsp_server-mac
- asset_content_type: application/octet-stream
-
- - uses: actions/upload-release-asset@v1.0.1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- upload_url: ${{ steps.create_release.outputs.upload_url }}
- asset_path: ./dist/ra_lsp_server-windows.exe
- asset_name: ra_lsp_server-windows.exe
- asset_content_type: application/octet-stream
-
- - uses: actions/upload-release-asset@v1.0.1
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- upload_url: ${{ steps.create_release.outputs.upload_url }}
- asset_path: ./dist/rust-analyzer-0.1.0.vsix
- asset_name: rust-analyzer-0.1.0.vsix
- asset_content_type: application/octet-stream
-
- - run: npm ci
- working-directory: ./editors/code
-
- - name: Publish Extension
- working-directory: ./editors/code
- # token from https://dev.azure.com/rust-analyzer/
- run: npx vsce publish 0.1.$(date +%Y%m%d) --pat ${{ secrets.MARKETPLACE_TOKEN }}
+ - name: Install Nodejs
+ uses: actions/setup-node@v1
+ with:
+ node-version: 12.x
+
+ - run: echo "::set-env name=TAG::$(date --iso --utc)"
+ if: github.ref == 'refs/heads/release'
+ - run: echo "::set-env name=TAG::nightly"
+ if: github.ref != 'refs/heads/release'
+ - run: 'echo "TAG: $TAG"'
+
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ - uses: actions/download-artifact@v1
+ with:
+ name: dist-macos-latest
+ path: dist
+ - uses: actions/download-artifact@v1
+ with:
+ name: dist-ubuntu-16.04
+ path: dist
+ - uses: actions/download-artifact@v1
+ with:
+ name: dist-windows-latest
+ path: dist
+ - run: ls -all ./dist
+
+ - name: Publish Release
+ uses: ./.github/actions/github-release
+ with:
+ files: "dist/*"
+ name: ${{ env.TAG }}
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ - run: npm ci
+ working-directory: ./editors/code
+
+ - name: Publish Extension
+ if: github.ref == 'refs/heads/release'
+ working-directory: ./editors/code
+ # token from https://dev.azure.com/rust-analyzer/
+ run: npx vsce publish --pat ${{ secrets.MARKETPLACE_TOKEN }} --packagePath ../../dist/rust-analyzer.vsix