feat: automatically download the server executable if it is not present #75
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Semantic Release | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- master | |
- client-server | |
permissions: | |
contents: write | |
issues: write | |
pull-requests: write | |
concurrency: | |
group: ${{ github.workflow }} | |
jobs: | |
get-next-version: | |
uses: semantic-release-action/next-release-version/.github/workflows/next-release-version.yml@v4 | |
build: | |
name: Build ${{ matrix.target }} | |
runs-on: ${{ matrix.os }} | |
if: needs.get-next-version.outputs.new-release-published == 'true' | |
needs: | |
- get-next-version | |
strategy: | |
matrix: | |
include: | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
- os: ubuntu-latest | |
target: aarch64-unknown-linux-musl | |
- os: ubuntu-latest | |
target: i686-unknown-linux-musl | |
- os: ubuntu-latest | |
target: x86_64-unknown-freebsd | |
- os: ubuntu-latest | |
target: i686-unknown-freebsd | |
- os: macos-latest | |
target: x86_64-apple-darwin | |
- os: macos-latest | |
target: aarch64-apple-darwin | |
- os: windows-latest | |
target: x86_64-pc-windows-msvc | |
- os: windows-latest | |
target: aarch64-pc-windows-msvc | |
- os: windows-latest | |
target: i686-pc-windows-msvc | |
steps: | |
- name: Echo version | |
run: | | |
echo "Detected version: ${{ needs.get-next-version.outputs.new-release-version }}" | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Rust | |
uses: actions-rs/toolchain@v1 | |
id: rust-toolchain | |
with: | |
profile: minimal | |
toolchain: nightly | |
override: true | |
- name: Cache Cargo | |
uses: actions/cache@v4 | |
id: cargo-cache | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ runner.os }}-cargo-${{ steps.rust-toolchain.outputs.cachekey }}-${{ hashFiles('**/Cargo.lock') }} | |
- name: Install semantic-release-cargo | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: semantic-release-cargo@2 | |
- name: Prepare semantic-release for Rust | |
run: semantic-release-cargo prepare ${{ needs.get-next-version.outputs.new-release-version }} | |
- name: Install additional targets | |
run: rustup target add ${{ matrix.target }} | |
- name: Install cross | |
run: cargo install cross | |
- name: Build and copy (Windows) | |
if: contains(matrix.target, 'windows') | |
shell: pwsh | |
run: | | |
cross build --release --target ${{ matrix.target }} | |
New-Item -ItemType Directory -Force -Path dist | |
$ARCH = "${{ matrix.target }}" -split '-' | Select-Object -First 1 | |
Copy-Item "target/${{ matrix.target }}/release/cord.exe" -Destination "dist/${ARCH}-windows-cord.exe" | |
- name: Build and copy (Non-Windows) | |
if: contains(matrix.target, 'windows') != true | |
run: | | |
cross build --release --target ${{ matrix.target }} | |
mkdir -p dist | |
ARCH=$(echo ${{ matrix.target }} | cut -d '-' -f 1) | |
if [[ "${{ matrix.target }}" == *"linux"* ]]; then | |
cp target/${{ matrix.target }}/release/cord dist/${ARCH}-linux-cord | |
elif [[ "${{ matrix.target }}" == *"darwin"* ]]; then | |
cp target/${{ matrix.target }}/release/cord dist/${ARCH}-darwin-cord | |
elif [[ "${{ matrix.target }}" == *"freebsd"* ]]; then | |
cp target/${{ matrix.target }}/release/cord dist/${ARCH}-bsd-cord | |
fi | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: binaries | |
path: dist/* | |
check-server: | |
runs-on: ubuntu-latest | |
if: needs.get-next-version.outputs.new-release-published == 'true' | |
needs: | |
- get-next-version | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: client-server | |
- name: Check Server Version | |
run: | | |
CARGO_VERSION=$(grep '^version = ' Cargo.toml | cut -d'"' -f2) | |
SERVER_VERSION=$(cat .github/server-version.txt | tr -d '\n') | |
if [ "$CARGO_VERSION" != "$SERVER_VERSION" ]; then | |
echo "$CARGO_VERSION" > .github/server-version.txt | |
git checkout client-server | |
git config --global user.name 'github-actions[bot]' | |
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | |
git add .github/server-version.txt | |
git commit -m "chore: update server version to $CARGO_VERSION [skip ci]" | |
git push | |
fi | |
release: | |
runs-on: ubuntu-latest | |
if: needs.get-next-version.outputs.new-release-published == 'true' | |
needs: [get-next-version, build] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: binaries | |
path: dist | |
- name: Invoke semantic-release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
npm install -g semantic-release | |
npm install -g @semantic-release/changelog | |
npm install -g @semantic-release/git | |
npm install -g @semantic-release/github | |
npx semantic-release --repository-url https://github.com/vyfor/cord.nvim | |
luarocks: | |
name: LuaRocks Publish | |
runs-on: ubuntu-latest | |
if: needs.get-next-version.outputs.new-release-published == 'true' | |
needs: [get-next-version, release] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
ref: client-server | |
- name: Set LuaRocks version | |
id: set_version | |
run: | | |
VERSION="${{ needs.get-next-version.outputs.new-release-version }}" | |
if [[ $VERSION == *"-beta"* ]]; then | |
# Convert 2.0.0-beta.1 to 2.0.0beta-1 | |
BASE_VERSION=$(echo $VERSION | cut -d'-' -f1) | |
BETA_NUM=$(echo $VERSION | grep -oP '(?<=beta\.)\d+') | |
echo "version=${BASE_VERSION}beta" >> $GITHUB_OUTPUT | |
echo "rockspec_revision=$BETA_NUM" >> $GITHUB_OUTPUT | |
else | |
echo "version=$VERSION" >> $GITHUB_OUTPUT | |
echo "rockspec_revision=1" >> $GITHUB_OUTPUT | |
fi | |
- uses: nvim-neorocks/luarocks-tag-release@v7 | |
with: | |
copy_directories: "plugin" | |
version: ${{ steps.set_version.outputs.version }} | |
specrev: ${{ steps.set_version.outputs.rockspec_revision }} | |
detailed_description: | | |
Meet the future of rich presence with Cord, the most extensible Discord Rich Presence plugin for Neovim, powered by Rust. | |
Cord offers a wide range of customization options allowing you to create custom and dynamic experiences that adapt to your needs. | |
The possibilities are endless, and the only limit is your creativity! | |
env: | |
LUAROCKS_API_KEY: ${{ secrets.LUAROCKS_API_KEY }} |