vrchatapi 1.22.2-nightly.4

VRChat API Client for Rust
Documentation
on:
  push:
    branches:
      - '**'
  pull_request:
  repository_dispatch:
    types: [release]
  workflow_dispatch:
    inputs:
      tag:
        description: Release to build, such as v1.22.1 or nightly. Defaults to the latest release.
        required: false
        type: string
        default: ''
      version_postfix:
        description: Additional string to concatenate onto the existing version before release
        required: false
        type: string
        default: ''
  workflow_call:
    inputs:
      ref:
        description: Ref of this repository to build.
        required: false
        type: string
        default: main

name: CI

env:
  VERSION_POSTPEND: ${{ github.event_name == 'workflow_dispatch' && inputs.version_postfix || '' }}

jobs:
  generate:
    runs-on: ubuntu-latest
    outputs:
      version: ${{ steps.version.outputs.version }}
    steps:
      - uses: actions/checkout@v7
        with:
          repository: vrchatapi/vrchatapi-rust
          ref: ${{ inputs.ref || github.ref }}

      - uses: vrchatapi/specification/.github/actions/setup-generator@main

      - uses: vrchatapi/specification/.github/actions/download@main
        with:
          bundle: openapi-3.1.json
          tag: ${{ inputs.tag }}

      - id: version
        run: echo "version=$(yq '--unwrapScalar' '.info.version' openapi-3.1.json)${VERSION_POSTPEND}" >> $GITHUB_OUTPUT

      - if: env.VERSION_POSTPEND != ''
        run: yq '--inplace' ".info.version |= \"${{ steps.version.outputs.version }}\"" openapi-3.1.json

      - run: bash ./generate.sh openapi-3.1.json

      - run: |
          set -euo pipefail

          if [ "$(yq '--unwrapScalar' '--input-format=toml' '--output-format=toml' '.package.version' Cargo.toml)" != "${{ steps.version.outputs.version }}" ]; then
            echo "Mismatch between actual and expected version" >&2
            exit 1
          fi

      - uses: actions/upload-artifact@v7
        with:
          name: rust-generated
          path: |
            .
            !.git/**
          include-hidden-files: true

  format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
        with:
          repository: vrchatapi/vrchatapi-rust
          ref: ${{ inputs.ref || github.ref }}

      - uses: moonrepo/setup-rust@v1.3.0
        with:
          components: rustfmt

      - run: cargo fmt --all -- --check

  test:
    needs: generate
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v8
        with:
          name: rust-generated

      - uses: moonrepo/setup-rust@v1.3.0

      - run: cargo test --all

  publish:
    needs:
      - generate
      - format
      - test
    if: github.repository == 'vrchatapi/vrchatapi-rust'
      && (github.event_name == 'repository_dispatch' || github.event_name == 'workflow_dispatch')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7
        with:
          repository: vrchatapi/vrchatapi-rust

      - uses: actions/download-artifact@v8
        with:
          name: rust-generated

      - run: rm -f openapi-3.1.json

      - uses: JamesIves/github-pages-deploy-action@v4.9.0
        with:
          branch: main
          folder: .
          commit-message: Upgrade Rust SDK to spec ${{ needs.generate.outputs.version }}

      - uses: moonrepo/setup-rust@v1.3.0

      # Cargo.toml always reads as dirty, though the change was pushed above.
      - run: cargo publish --allow-dirty
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}