name: tinymist::crates::publish
on:
  push:
    tags:
      - "*"
  workflow_dispatch:

env:
  RUSTFLAGS: '-Dwarnings'

jobs:

  publish-crates:
    name: build 
    runs-on: ubuntu-latest
    env:
      CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      # https://github.com/dtolnay/rust-toolchain/issues/133
      # https://github.com/rust-lang/rustup/issues/3635
      # Only needed if your action will run two or more rust
      # commands concurrently, otherwise rustup will lazily 
      # install your rust-toolchain.toml when needed:
      - name: 'Install from rust-toolchain.toml'
        run: rustup show
      - name: Install llvm
        run: |
          sudo apt-get update
          sudo apt-get install llvm
      - name: Publish crates
        run: |
          cargo publish --no-verify -p typst-shim || true
          cargo publish --no-verify -p tinymist-derive || true
          cargo publish --no-verify -p tinymist-l10n || true
          cargo publish --no-verify -p tinymist-std || true
          cargo publish --no-verify -p sync-ls || true
          cargo publish --no-verify -p tinymist-package || true
          cargo publish --no-verify -p tinymist-vfs || true
          cargo publish --no-verify -p tinymist-world || true
          cargo publish --no-verify -p tinymist-analysis || true
          cargo publish --no-verify -p tinymist-task || true
          cargo publish --no-verify -p tinymist-project || true
          cargo publish --no-verify -p typlite || true
          cargo publish --no-verify -p crityp || true
          
          cargo publish --no-verify -p tinymist-debug || true
          cargo publish --no-verify -p tinymist-lint || true
          cargo publish --no-verify -p tinymist-query || true
          cargo publish --no-verify -p tinymist-render || true
          cargo publish --no-verify -p tinymist-preview || true
          cargo publish --no-verify -p tinymist || true
          cargo publish --no-verify -p tinymist-cli || true
      - name: Verifies crate health (Optional)
        run: |
          cargo publish --dry-run -p typst-shim
          cargo publish --dry-run -p tinymist-derive
          cargo publish --dry-run -p tinymist-l10n
          cargo publish --dry-run -p tinymist-std
          cargo publish --dry-run -p sync-ls
          cargo publish --dry-run -p tinymist-vfs
          cargo publish --dry-run -p tinymist-package
          cargo publish --dry-run -p tinymist-world
          cargo publish --dry-run -p tinymist-task --features no-content-hint
          cargo publish --dry-run -p tinymist-project --features no-content-hint
          cargo publish --dry-run -p typlite
          cargo publish --dry-run -p crityp
          # needs patched typst
          # cargo publish --dry-run -p tinymist-analysis
          