From 86b729b04bea32a75433bc942e8c8833f54c226b Mon Sep 17 00:00:00 2001 From: Alex Galey Date: Wed, 12 Oct 2022 13:56:21 +0200 Subject: [PATCH] Enable supabase-cli types gen (#10) * Add supabase-cli types generation * Bump cli 1.5.3 - setup-cli 1.0.2 * Update Readme example for use with supabase-cli * chore: update docs for autogen on db update * update docs for migration from v0.1.0 to v0.2.0 * update indent in yml examples * update docs to be explicit in affected types * add doc for how to get sb access token * add description for migration script use case * update checkout action to v3 * update action to run supabase init and start to create config.toml * init and start only for the first run Co-authored-by: lyqht --- README.md | 81 ++++++++-- access_token_preview.png | Bin 0 -> 94875 bytes action.yml | 35 ++-- exampleV010.ts | 341 +++++++++++++++++++++++++++++++++++++++ exampleV020.ts | 78 +++++++++ 5 files changed, 508 insertions(+), 27 deletions(-) create mode 100644 access_token_preview.png create mode 100644 exampleV010.ts create mode 100644 exampleV020.ts diff --git a/README.md b/README.md index 9d1f4f6..97bc548 100644 --- a/README.md +++ b/README.md @@ -7,15 +7,32 @@ This GitHub action workflow aims to help you to create Supabase database definit This workflow is a composite action: -- To generate database types based on the Swagger OpenAPI specification of your Supabase project REST data endpoint, [openapi-typescript](https://github.com/drwpow/openapi-typescript) is used. +- To generate database types, we use [supabase/setup-cli](https://github.com/supabase/setup-cli) action is used to run supabase CLI built-in command. - Commit and push github actions to your repo are performed by the [git-auto-commit action](https://github.com/stefanzweifel/git-auto-commit-action). - Creating the pull request is performed by [pull-request action](https://github.com/repo-sync/pull-request). ## How to use -If you are new to GitHub Actions, refer to [this section](#if-you-dont-have-an-existing-github-action-workflow-for-your-repository). Otherwise, you can get started by referring to to the example given and the input options available. +
If you don't have an existing GitHub Action workflow for your repository -### Example +1. Create a folder `.github/workflows` if you don't have it already +2. Inside that folder, create a YAML file say `update-types.yml` +3. In the `update-types.yml` file, you can copy the example above and modify it to your usage. +4. You can choose to declare the `schedule` with a cron expression to run the job at a specified frequency e.g. every day once. +
+ +
How to get Supabase Access Token + +Go to https://app.supabase.com/account/tokens and get a token there. + +![](access_token_preview.png) + +
+ + +Otherwise, you can get started by referring to to the example given and the input options available. + +### Simple Example ```yml name: Update database types @@ -27,22 +44,58 @@ on: jobs: build: runs-on: ubuntu-latest + steps: + - uses: lyqht/generate-supabase-db-types-github-action@main + with: + SUPABASE_REF_ID: ${{ secrets.SUPABASE_REF_ID }} + SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} + DB_PASSWORD: ${{ secrets.DB_PASSWORD }} + OUTPUT_PATH: db.types.ts +``` +### Example based on migration scripts + +If your DB schema is kept up to date based on the migration SQL scripts within your project itself, you can configure the workflow to run based on any new SQL files pushed to your branch. +```yml +name: Update database types +on: + push: + branches: [ main ] + paths: + - '*.sql' + +jobs: + build: + runs-on: ubuntu-latest + if: github.head_ref != 'supabot**' steps: - - uses: lyqht/generate-supabase-db-types-github-action@main - with: - SUPABASE_URL: ${{secrets.SUPABASE_URL }} # e.g. https://interestingproject.supabase.co - SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }} - OUTPUT_PATH: src/types/supabase.ts + - uses: lyqht/generate-supabase-db-types-github-action@main + with: + SUPABASE_REF_ID: ${{ secrets.SUPABASE_REF_ID }} + SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} + DB_PASSWORD: ${{ secrets.DB_PASSWORD }} + OUTPUT_PATH: db.types.ts ``` -### If you don't have an existing GitHub Action workflow for your repository +## Migrating from `v0.1.0` to `v0.2.0` + +Please note that this will be a breaking change. The types generated from v0.1.0 could be different from that of v0.2.0, so you may need to modify your code quite a bit if you choose to migrate for fields of data types such as `JSON`, `Date`. However, `v0.2.0` types follows what supabase recommends. + +### Why and how the types are different? + +v0.1.0 relies on the `openapi-typescript` library to generate types based on the OpenAPI specs that the Supabase endpoint offers. +v0.2.0 relies on `supabase-cli` to generate the types using supabase, and these types are much more compatible to the `supabasejs-v2` library. + +- Types generated by v0.1.0: [Example](./exampleV010.ts) +- Types generated by v0.2.0: [Example](./exampleV020.ts) + +### Changes to make + +You need to make the following changes in variables: +- No longer used: `SUPABASE_URL: ${{secrets.SUPABASE_URL }}` and `SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }}` +- You have to add `SUPABASE_REF_ID: ${{ secrets.SUPABASE_REF_ID }}`, and `SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }}` -1. Create a folder `.github/workflows` if you don't have it already -2. Inside that folder, create a YAML file say `update-types.yml` -3. In the `update-types.yml` file, you can copy the example above and modify it to your usage. -4. You can choose to declare the `schedule` with a cron expression to run the job at a specified frequency e.g. every day once. ---- +## Cavaets > Note that if your Supabase project is paused or deleted, this bot will only result in failed jobs. diff --git a/access_token_preview.png b/access_token_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..7e158ed8d8c3256c1b91b2f80d093ddda8181df7 GIT binary patch literal 94875 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 literal 0 HcmV?d00001 diff --git a/action.yml b/action.yml index 2a3c11b..2a96329 100644 --- a/action.yml +++ b/action.yml @@ -3,11 +3,14 @@ author: 'Estee Tey' description: 'Automatically updates your type definitions to match your table schemas' inputs: - SUPABASE_ANON_KEY: - description: "Anonymous API key of your Supabase project" + SUPABASE_REF_ID: + description: "Reference id of your Supabase project" required: true - SUPABASE_URL: - description: "Endpoint of your Supabase project" + SUPABASE_ACCESS_TOKEN: + description: "Access token https://app.supabase.com/account/tokens" + required: true + DB_PASSWORD: + description: "Database password" required: true OUTPUT_PATH: description: "Path where you want the definitions file to be saved. Any changes will be committed and override existing definition files. Default value is 'src/types/supabase.ts'" @@ -18,21 +21,27 @@ runs: using: composite steps: - name: Checkout project - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: persist-credentials: true fetch-depth: 0 - - name: Set up node - uses: actions/setup-node@v2.1.5 - - name: "Retrieve OpenAPI specifications of Supabase project" + - name: Set up supabase cli + uses: supabase/setup-cli@v1.0.2 + with: + version: 1.5.3 + - name: "Generate database typescript types" shell: bash env: - SUPABASE_URL: ${{ inputs.SUPABASE_URL }} - SUPABASE_ANON_KEY: ${{ inputs.SUPABASE_ANON_KEY }} + SUPABASE_REF_ID: ${{ inputs.SUPABASE_REF_ID }} + SUPABASE_ACCESS_TOKEN: ${{ inputs.SUPABASE_ACCESS_TOKEN }} + DB_PASSWORD: ${{ inputs.DB_PASSWORD }} OUTPUT_PATH: ${{ inputs.OUTPUT_PATH }} run: | - npx openapi-typescript ${SUPABASE_URL}/rest/v1/?apikey=${SUPABASE_ANON_KEY} --version=2 --output ${OUTPUT_PATH} - echo "$(cat src/types/supabase.ts)" + if [ ! -f supabase/config.toml ]; then + supabase init && supabase start + fi + supabase link --project-ref ${SUPABASE_REF_ID} --password ${DB_PASSWORD} + supabase gen types typescript --db-url "postgresql://postgres:${DB_PASSWORD}@db.${SUPABASE_REF_ID}.supabase.co:6543/postgres" > ${OUTPUT_PATH} - name: Check for file changes & commit files uses: stefanzweifel/git-auto-commit-action@v4 with: @@ -56,4 +65,4 @@ runs: branding: icon: 'activity' - color: 'blue' \ No newline at end of file + color: 'blue' diff --git a/exampleV010.ts b/exampleV010.ts new file mode 100644 index 0000000..9d255a4 --- /dev/null +++ b/exampleV010.ts @@ -0,0 +1,341 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/": { + get: { + responses: { + /** OK */ + 200: unknown; + }; + }; + }; + "/DeletedRecords": { + get: { + parameters: { + query: { + id?: parameters["rowFilter.DeletedRecords.id"]; + created_at?: parameters["rowFilter.DeletedRecords.created_at"]; + repo?: parameters["rowFilter.DeletedRecords.repo"]; + sourceRepo?: parameters["rowFilter.DeletedRecords.sourceRepo"]; + isFork?: parameters["rowFilter.DeletedRecords.isFork"]; + userId?: parameters["rowFilter.DeletedRecords.userId"]; + repoDetails?: parameters["rowFilter.DeletedRecords.repoDetails"]; + /** Filtering Columns */ + select?: parameters["select"]; + /** Ordering */ + order?: parameters["order"]; + /** Limiting and Pagination */ + offset?: parameters["offset"]; + /** Limiting and Pagination */ + limit?: parameters["limit"]; + }; + header: { + /** Limiting and Pagination */ + Range?: parameters["range"]; + /** Limiting and Pagination */ + "Range-Unit"?: parameters["rangeUnit"]; + /** Preference */ + Prefer?: parameters["preferCount"]; + }; + }; + responses: { + /** OK */ + 200: { + schema: definitions["DeletedRecords"][]; + }; + /** Partial Content */ + 206: unknown; + }; + }; + post: { + parameters: { + body: { + /** DeletedRecords */ + DeletedRecords?: definitions["DeletedRecords"]; + }; + query: { + /** Filtering Columns */ + select?: parameters["select"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** Created */ + 201: unknown; + }; + }; + delete: { + parameters: { + query: { + id?: parameters["rowFilter.DeletedRecords.id"]; + created_at?: parameters["rowFilter.DeletedRecords.created_at"]; + repo?: parameters["rowFilter.DeletedRecords.repo"]; + sourceRepo?: parameters["rowFilter.DeletedRecords.sourceRepo"]; + isFork?: parameters["rowFilter.DeletedRecords.isFork"]; + userId?: parameters["rowFilter.DeletedRecords.userId"]; + repoDetails?: parameters["rowFilter.DeletedRecords.repoDetails"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** No Content */ + 204: never; + }; + }; + patch: { + parameters: { + query: { + id?: parameters["rowFilter.DeletedRecords.id"]; + created_at?: parameters["rowFilter.DeletedRecords.created_at"]; + repo?: parameters["rowFilter.DeletedRecords.repo"]; + sourceRepo?: parameters["rowFilter.DeletedRecords.sourceRepo"]; + isFork?: parameters["rowFilter.DeletedRecords.isFork"]; + userId?: parameters["rowFilter.DeletedRecords.userId"]; + repoDetails?: parameters["rowFilter.DeletedRecords.repoDetails"]; + }; + body: { + /** DeletedRecords */ + DeletedRecords?: definitions["DeletedRecords"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** No Content */ + 204: never; + }; + }; + }; + "/UpdatedRecords": { + get: { + parameters: { + query: { + id?: parameters["rowFilter.UpdatedRecords.id"]; + created_at?: parameters["rowFilter.UpdatedRecords.created_at"]; + repo?: parameters["rowFilter.UpdatedRecords.repo"]; + userId?: parameters["rowFilter.UpdatedRecords.userId"]; + initialRepoDetails?: parameters["rowFilter.UpdatedRecords.initialRepoDetails"]; + updatedFields?: parameters["rowFilter.UpdatedRecords.updatedFields"]; + /** Filtering Columns */ + select?: parameters["select"]; + /** Ordering */ + order?: parameters["order"]; + /** Limiting and Pagination */ + offset?: parameters["offset"]; + /** Limiting and Pagination */ + limit?: parameters["limit"]; + }; + header: { + /** Limiting and Pagination */ + Range?: parameters["range"]; + /** Limiting and Pagination */ + "Range-Unit"?: parameters["rangeUnit"]; + /** Preference */ + Prefer?: parameters["preferCount"]; + }; + }; + responses: { + /** OK */ + 200: { + schema: definitions["UpdatedRecords"][]; + }; + /** Partial Content */ + 206: unknown; + }; + }; + post: { + parameters: { + body: { + /** UpdatedRecords */ + UpdatedRecords?: definitions["UpdatedRecords"]; + }; + query: { + /** Filtering Columns */ + select?: parameters["select"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** Created */ + 201: unknown; + }; + }; + delete: { + parameters: { + query: { + id?: parameters["rowFilter.UpdatedRecords.id"]; + created_at?: parameters["rowFilter.UpdatedRecords.created_at"]; + repo?: parameters["rowFilter.UpdatedRecords.repo"]; + userId?: parameters["rowFilter.UpdatedRecords.userId"]; + initialRepoDetails?: parameters["rowFilter.UpdatedRecords.initialRepoDetails"]; + updatedFields?: parameters["rowFilter.UpdatedRecords.updatedFields"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** No Content */ + 204: never; + }; + }; + patch: { + parameters: { + query: { + id?: parameters["rowFilter.UpdatedRecords.id"]; + created_at?: parameters["rowFilter.UpdatedRecords.created_at"]; + repo?: parameters["rowFilter.UpdatedRecords.repo"]; + userId?: parameters["rowFilter.UpdatedRecords.userId"]; + initialRepoDetails?: parameters["rowFilter.UpdatedRecords.initialRepoDetails"]; + updatedFields?: parameters["rowFilter.UpdatedRecords.updatedFields"]; + }; + body: { + /** UpdatedRecords */ + UpdatedRecords?: definitions["UpdatedRecords"]; + }; + header: { + /** Preference */ + Prefer?: parameters["preferReturn"]; + }; + }; + responses: { + /** No Content */ + 204: never; + }; + }; + }; +} + +export interface definitions { + DeletedRecords: { + /** + * Format: bigint + * @description Note: + * This is a Primary Key. + */ + id: number; + /** + * Format: timestamp with time zone + * @default now() + */ + created_at: string; + /** Format: text */ + repo: string; + /** Format: text */ + sourceRepo?: string; + /** + * Format: boolean + * @default false + */ + isFork: boolean; + /** Format: uuid */ + userId: string; + /** Format: json */ + repoDetails: unknown; + }; + UpdatedRecords: { + /** + * Format: bigint + * @description Note: + * This is a Primary Key. + */ + id: number; + /** + * Format: timestamp without time zone + * @default now() + */ + created_at: string; + /** Format: text */ + repo: string; + /** Format: uuid */ + userId?: string; + /** Format: json */ + initialRepoDetails: { + prevTopics: string[]; + }; + /** Format: json */ + updatedFields: { + topics: string[]; + }; + }; +} + +export interface parameters { + /** + * @description Preference + * @enum {string} + */ + preferParams: "params=single-object"; + /** + * @description Preference + * @enum {string} + */ + preferReturn: "return=representation" | "return=minimal" | "return=none"; + /** + * @description Preference + * @enum {string} + */ + preferCount: "count=none"; + /** @description Filtering Columns */ + select: string; + /** @description On Conflict */ + on_conflict: string; + /** @description Ordering */ + order: string; + /** @description Limiting and Pagination */ + range: string; + /** + * @description Limiting and Pagination + * @default items + */ + rangeUnit: string; + /** @description Limiting and Pagination */ + offset: string; + /** @description Limiting and Pagination */ + limit: string; + /** @description DeletedRecords */ + "body.DeletedRecords": definitions["DeletedRecords"]; + /** Format: bigint */ + "rowFilter.DeletedRecords.id": string; + /** Format: timestamp with time zone */ + "rowFilter.DeletedRecords.created_at": string; + /** Format: text */ + "rowFilter.DeletedRecords.repo": string; + /** Format: text */ + "rowFilter.DeletedRecords.sourceRepo": string; + /** Format: boolean */ + "rowFilter.DeletedRecords.isFork": string; + /** Format: uuid */ + "rowFilter.DeletedRecords.userId": string; + /** Format: json */ + "rowFilter.DeletedRecords.repoDetails": string; + /** @description UpdatedRecords */ + "body.UpdatedRecords": definitions["UpdatedRecords"]; + /** Format: bigint */ + "rowFilter.UpdatedRecords.id": string; + /** Format: timestamp without time zone */ + "rowFilter.UpdatedRecords.created_at": string; + /** Format: text */ + "rowFilter.UpdatedRecords.repo": string; + /** Format: uuid */ + "rowFilter.UpdatedRecords.userId": string; + /** Format: json */ + "rowFilter.UpdatedRecords.initialRepoDetails": string; + /** Format: json */ + "rowFilter.UpdatedRecords.updatedFields": string; +} diff --git a/exampleV020.ts b/exampleV020.ts new file mode 100644 index 0000000..5eb49d2 --- /dev/null +++ b/exampleV020.ts @@ -0,0 +1,78 @@ +export type Json = + | string + | number + | boolean + | null + | { [key: string]: Json } + | Json[]; + +export interface Database { + public: { + Tables: { + UpdatedRecords: { + Row: { + id: number; + created_at: string | null; + repo: string; + userId: string | null; + initialRepoDetails: Json; + updatedFields: Json; + }; + Insert: { + id?: number; + created_at?: string | null; + repo: string; + userId?: string | null; + initialRepoDetails: Json; + updatedFields: Json; + }; + Update: { + id?: number; + created_at?: string | null; + repo?: string; + userId?: string | null; + initialRepoDetails?: Json; + updatedFields?: Json; + }; + }; + DeletedRecords: { + Row: { + id: number; + created_at: string | null; + repo: string; + sourceRepo: string | null; + isFork: boolean; + userId: string; + repoDetails: Json; + }; + Insert: { + id?: number; + created_at?: string | null; + repo: string; + sourceRepo?: string | null; + isFork?: boolean; + userId: string; + repoDetails: Json; + }; + Update: { + id?: number; + created_at?: string | null; + repo?: string; + sourceRepo?: string | null; + isFork?: boolean; + userId?: string; + repoDetails?: Json; + }; + }; + }; + Views: { + [_ in never]: never; + }; + Functions: { + [_ in never]: never; + }; + Enums: { + [_ in never]: never; + }; + }; +}