Skip to content

feat: automatically download the server executable if it is not present #75

feat: automatically download the server executable if it is not present

feat: automatically download the server executable if it is not present #75

Workflow file for this run

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 }}