dsync 0.1.0

Generate rust structs & query functions from diesel schema files.
Documentation
name: CI
on:
  push:
    branches:
      - main
  pull_request:
  workflow_dispatch:

env:
  CARGO_TERM_COLOR: always

concurrency:
  group: CI-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    name: cargo build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: rui314/setup-mold@v1
      - uses: dtolnay/rust-toolchain@stable
      - uses: actions/cache@v3
        with:
          path: |
            ./.cargo/.build
            ./target
            ~/.cargo
          key: ${{ runner.os }}-cargo-dev-${{ hashFiles('**/Cargo.lock') }}
      - run: cargo build --all-targets

  clippy:
    name: cargo clippy
    needs: [build]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: rui314/setup-mold@v1
      - uses: dtolnay/rust-toolchain@stable
      - run: rustup component add clippy
      - uses: actions/cache@v3
        with:
          path: |
            ./.cargo/.build
            ./target
            ~/.cargo
          key: ${{ runner.os }}-cargo-dev-${{ hashFiles('**/Cargo.lock') }}
      - run: cargo clippy --all

  test-script:
    name: test-scripts
    needs: [build]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: rui314/setup-mold@v1
      - uses: dtolnay/rust-toolchain@stable
      - uses: actions/cache@v3
        with:
          path: |
            ./.cargo/.build
            ./target
            ~/.cargo
          key: ${{ runner.os }}-cargo-dev-${{ hashFiles('**/Cargo.lock') }}
      - run: bash test/test_all.sh
      - run: git diff --exit-code --stat || exit 1

  # things that use the cargo-test cache
  test:
    name: cargo test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: rui314/setup-mold@v1
      - uses: dtolnay/rust-toolchain@stable
      - uses: actions/cache@v3
        with:
          path: |
            ./.cargo/.build
            ./target
            ~/.cargo
          key: ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock') }}
      - run: cargo test

  # Things that don't need a cache
  fmt:
    name: cargo fmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: nightly
      - run: rustup component add rustfmt
      - run: cargo fmt --all -- --check

  release:
    runs-on: ubuntu-latest
    name: release
    needs: [build, clippy, test, test-script, fmt]
    if: github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main'
    permissions:
      contents: write  # for actions/checkout to fetch code and for semantic-release to push commits, release releases and tags
      issues: write # for semantic-release to comment on and close issues
      pull-requests: write # for semantic-release to comment on and close pull requests
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - name: Semantic Release
        uses: cycjimmy/semantic-release-action@61680d0e9b02ff86f5648ade99e01be17f0260a4 # v4
        with:
          dry_run: true
          extra_plugins: |
            @semantic-release/git
            @semantic-release/changelog
            @semantic-release/commit-analyzer
            @semantic-release/release-notes-generator
            @semantic-release/github
            @semantic-release-cargo/semantic-release-cargo
            @commitlint/config-conventional
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}