Setup server logging to file using standard XDG directory (#334) #62
This file contains hidden or 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: 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-*/* |