name: Generate OpenAPI SDK

on:
  workflow_dispatch:
  push:
    branches: [main]

jobs:
  generate-typescript-axios:
    runs-on: ubuntu-latest
    name: OpenAPI Generator
    steps:
      # Checkout your code
      - name: Checkout
        uses: actions/checkout@v3
        with:
          token: ${{ secrets.GH_TOKEN }}

      # Use the action to generate a client package
      # This uses the default path for the openapi document and thus assumes there is an openapi.json in the current workspace.
      - name: Generate Typescript Axios Client
        uses: openapi-generators/openapitools-generator-action@v1
        with:
          generator: typescript-axios
          generator-tag: v6.2.0
          openapi-file: server/immich-openapi-specs.json

      # Do something with the generated client (likely publishing it somewhere)
      - name: Push to typescript repo
        run: |
          git config --global init.defaultBranch main
          git config --global pull.rebase false
          git config --global user.email "alex.tran1502@gmail.com"
          git config --global user.name "Alex Tran"
          cd typescript-axios-client  
          git init
          git add .
          git commit -m "Update SDK"
          git remote add origin https://immich-app:"${{ secrets.GH_TOKEN }}"@github.com/immich-app/immich-sdk-typescript-axios.git
          git pull origin main --allow-unrelated-histories
          git push origin main 2>&1 | grep -v 'To https'

      - name: Generate Dart SDK
        uses: openapi-generators/openapitools-generator-action@v1
        with:
          generator: dart
          generator-tag: v6.2.0
          openapi-file: server/immich-openapi-specs.json

      - name: Push to Dart repo
        run: |
          git config --global init.defaultBranch main
          git config --global pull.rebase false
          git config --global user.email "alex.tran1502@gmail.com"
          git config --global user.name "Alex Tran"
          cd dart-client
          git init
          git add .
          git commit -m "Update SDK"
          git remote add origin https://immich-app:"${{ secrets.GH_TOKEN }}"@github.com/immich-app/immich-sdk-dart.git
          git pull origin main --allow-unrelated-histories
          git push origin main 2>&1 | grep -v 'To https'

      - name: Generate Rust SDK
        uses: openapi-generators/openapitools-generator-action@v1
        with:
          generator: rust
          generator-tag: v6.2.0
          openapi-file: server/immich-openapi-specs.json

      - name: Push to Rust repo
        run: |
          git config --global init.defaultBranch main
          git config --global pull.rebase false
          git config --global user.email "alex.tran1502@gmail.com"
          git config --global user.name "Alex Tran"
          cd rust-client
          git init
          git add .
          git commit -m "Update SDK"
          git remote add origin https://immich-app:"${{ secrets.GH_TOKEN }}"@github.com/immich-app/immich-sdk-rust.git
          git pull origin main --allow-unrelated-histories
          git push origin main 2>&1 | grep -v 'To https'
