Skip to content

Setup server logging to file using standard XDG directory (#334) #62

Setup server logging to file using standard XDG directory (#334)

Setup server logging to file using standard XDG directory (#334) #62

Workflow file for this run

name: build
on:
push:
branches:
- main
- release/*
paths:
- .github/workflows/build.yml
- crates/**
- Cargo.lock
- Cargo.toml
workflow_call:
inputs:
version:
description: Version tag for release packaging
required: false
type: string
workflow_dispatch:
inputs:
version:
description: Version tag for release packaging
required: false
type: string
concurrency:
group: build-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
binary:
runs-on: ${{ matrix.platform.runner }}
env:
ZIG_VERSION: 0.13.0
strategy:
matrix:
platform:
- runner: ubuntu-22.04
target: x86_64
- runner: ubuntu-22.04
target: aarch64
- runner: macos-13
target: x86_64
- runner: macos-14
target: aarch64
- runner: windows-latest
target: x86_64
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: Prepare target and platform identifiers
shell: bash
env:
PLATFORM_TARGET: ${{ matrix.platform.target }}
RUNNER_OS: ${{ runner.os }}
run: |
target="$PLATFORM_TARGET"
if [[ "$RUNNER_OS" == "Linux" ]]; then
target+="-unknown-linux-gnu"
os="linux"
elif [[ "$RUNNER_OS" == "macOS" ]]; then
target+="-apple-darwin"
os="darwin"
elif [[ "$RUNNER_OS" == "Windows" ]]; then
target+="-pc-windows-msvc"
os="windows"
fi
if [[ "$PLATFORM_TARGET" == "x86_64" ]]; then
arch="x64"
elif [[ "$PLATFORM_TARGET" == "aarch64" ]]; then
arch="arm64"
fi
echo "TARGET=${target}" >> $GITHUB_ENV
echo "OS=${os:-'unknown'}" >> $GITHUB_ENV
echo "ARCH=${arch:-'unknown'}" >> $GITHUB_ENV
- name: Cache rustup toolchain
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: actions/cache@v4
with:
path: |
~/.rustup
key: ${{ runner.os }}-${{ runner.arch }}-rustup-${{ hashFiles('rust-toolchain.toml') }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-rustup-
- name: Cache Homebrew packages (macOS)
if: ${{ !startsWith(github.ref, 'refs/tags/') && runner.os == 'macOS' }}
uses: actions/cache@v4
with:
path: |
~/Library/Caches/Homebrew
key: ${{ runner.os }}-${{ matrix.platform.target }}-homebrew-${{ hashFiles('.github/workflows/build.yml') }}
restore-keys: |
${{ runner.os }}-${{ matrix.platform.target }}-homebrew-
- uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c
with:
cache: ${{ !startsWith(github.ref, 'refs/tags/') }}
target: ${{ env.TARGET }}
- name: Cache Zig toolchain
if: ${{ !startsWith(github.ref, 'refs/tags/') && runner.os == 'Linux' && matrix.platform.target == 'aarch64' }}
id: cache-zig
uses: actions/cache@v4
with:
path: |
zig-linux-x86_64-${{ env.ZIG_VERSION }}
~/.cargo/bin/cargo-zigbuild
key: ${{ runner.os }}-zig-toolchain-${{ env.ZIG_VERSION }}
- name: Install Zig and cargo-zigbuild
if: ${{ runner.os == 'Linux' && matrix.platform.target == 'aarch64' && steps.cache-zig.outputs.cache-hit != 'true' }}
shell: bash
run: |
wget -q "https://ziglang.org/download/${ZIG_VERSION}/zig-linux-x86_64-${ZIG_VERSION}.tar.xz"
tar xf "zig-linux-x86_64-${ZIG_VERSION}.tar.xz"
cargo install cargo-zigbuild
- name: Add Zig to PATH
if: ${{ runner.os == 'Linux' && matrix.platform.target == 'aarch64' }}
shell: bash
run: echo "${PWD}/zig-linux-x86_64-${ZIG_VERSION}" >> $GITHUB_PATH
- name: Build release binary
shell: bash
env:
RUNNER_OS: ${{ runner.os }}
run: |
if [[ "$RUNNER_OS" == "Linux" && "$TARGET" == aarch64* ]]; then
build_command="zigbuild"
else
build_command="build"
fi
cargo "$build_command" --verbose --release --target "$TARGET"
if [[ "$RUNNER_OS" == "Windows" ]]; then
bin="./target/${TARGET}/release/djls.exe"
else
bin="./target/${TARGET}/release/djls"
fi
echo "BIN=${bin}" >> $GITHUB_ENV
echo "ARTIFACT_PATH=${bin}" >> $GITHUB_ENV
- name: Strip release binary (Unix)
if: ${{ runner.os != 'Windows' }}
shell: bash
env:
RUNNER_OS: ${{ runner.os }}
run: |
if [[ "$RUNNER_OS" == "Linux" && "$TARGET" == aarch64* ]]; then
sudo apt-get update
sudo apt-get install -y binutils-aarch64-linux-gnu
aarch64-linux-gnu-strip "$BIN"
else
strip "$BIN"
fi
- name: Create release archive
if: ${{ inputs.version != '' }}
shell: bash
env:
VERSION: ${{ inputs.version }}
run: |
archive="django-language-server-${VERSION}-${OS}-${ARCH}"
mkdir -p "$archive"
cp "$BIN" "$archive/"
cp README.md "$archive/"
cp LICENSE "$archive/"
cp CHANGELOG.md "$archive/"
echo "ARCHIVE=${archive}" >> $GITHUB_ENV
- name: Package for release (Windows)
if: ${{ inputs.version != '' && runner.os == 'Windows' }}
shell: bash
run: |
7z a "${ARCHIVE}.zip" "$ARCHIVE"
certutil -hashfile "${ARCHIVE}.zip" SHA256 > "${ARCHIVE}.zip.sha256"
echo "ARTIFACT_PATH=${ARCHIVE}.zip*" >> $GITHUB_ENV
- name: Package for release (Unix)
if: ${{ inputs.version != '' && runner.os != 'Windows' }}
shell: bash
run: |
tar czf "${ARCHIVE}.tar.gz" "$ARCHIVE"
shasum -a 256 "${ARCHIVE}.tar.gz" > "${ARCHIVE}.tar.gz.sha256"
echo "ARTIFACT_PATH=${ARCHIVE}.tar.gz*" >> $GITHUB_ENV
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: binary-${{ env.OS }}-${{ env.ARCH }}
path: ${{ env.ARTIFACT_PATH }}
linux:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: ubuntu-22.04
target: x86_64
- runner: ubuntu-22.04
target: aarch64
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Build wheels
uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: auto
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.platform.target }}
path: dist
musllinux:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: ubuntu-22.04
target: x86_64
- runner: ubuntu-22.04
target: aarch64
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Build wheels
uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: musllinux_1_2
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-musllinux-${{ matrix.platform.target }}
path: dist
windows:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: windows-latest
target: x64
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/setup-python@v6
with:
architecture: ${{ matrix.platform.target }}
python-version: 3.x
- name: Cache rustup toolchain
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: actions/cache@v4
with:
path: |
~/.rustup
key: ${{ runner.os }}-${{ runner.arch }}-rustup-${{ hashFiles('rust-toolchain.toml') }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-rustup-
- name: Cache Cargo registry
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: actions/cache@v4
with:
path: |
~/.cargo/git
~/.cargo/registry
key: ${{ runner.os }}-${{ runner.arch }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-cargo-registry-
${{ runner.os }}-cargo-registry-
- name: Build wheels
uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-windows-${{ matrix.platform.target }}
path: dist
macos:
runs-on: ${{ matrix.platform.runner }}
strategy:
matrix:
platform:
- runner: macos-13
target: x86_64
- runner: macos-14
target: aarch64
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Cache rustup toolchain
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: actions/cache@v4
with:
path: |
~/.rustup
key: ${{ runner.os }}-${{ runner.arch }}-rustup-${{ hashFiles('rust-toolchain.toml') }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-rustup-
- name: Cache Cargo registry
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: actions/cache@v4
with:
path: |
~/.cargo/git
~/.cargo/registry
key: ${{ runner.os }}-${{ runner.arch }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ runner.arch }}-cargo-registry-
${{ runner.os }}-cargo-registry-
- name: Build wheels
uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380
with:
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.platform.target }}
path: dist
sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: Build sdist
uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380
with:
command: sdist
args: --out dist
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: dist
attest:
runs-on: ubuntu-latest
if: ${{ inputs.version != '' }}
needs: [binary, linux, musllinux, windows, macos, sdist]
permissions:
id-token: write
attestations: write
steps:
- uses: actions/download-artifact@v5
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v3
with:
subject-path: |
binary-*/*
wheels-*/*