Skip to content

vinceflores/repos-to-sanity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This is a Sanity Studio v3 plugin.

repos-to-sanity

This is a **Sanity Studio V3 dashboard widget plugin

This plugin allows you to import a github repository into your Sanity Studio CMS with just a click of a button.

alt text

Requirements

if @sanity/dashboard has not been installed.

npm i @sanity/dashboard

or

yarn add @sanity/dashboard

Installation

npm install repos-to-sanity @octokit/graphql @sanity/client @tanstack/react-query
or
yarn add repos-to-sanity @octokit/graphql @sanity/client @tanstack/react-query

Usage

Add the repo schema into repo.ts and add it to your list of schemaTypes

// repo.ts
import {defineField, defineType} from 'sanity'

export default defineType({
  name: 'repo',
  title: 'Repo',
  type: 'document',
  fields: [
    defineField({
      name: 'preview',
      title: 'Preview',
      type: 'image',

      description: 'Preview of the live site',
    }),
    defineField({
      name: 'repo_name',
      title: 'Reposityory Name',
      type: 'string',
      description: 'please use the name of the reposityory from github',
    }),
    defineField({
      name: 'repo_url',
      title: 'URL',
      type: 'string',
      description: 'This is the link to your repository',
    }),
    defineField({
      name: 'live_url',
      title: 'Live',
      type: 'string',
      description: 'This is the link to your repository',
    }),
    defineField({
      name: 'tags',
      title: 'Tags',
      type: 'array',
      of: [{type: 'string'}],
      description: 'This is where the tags go',
    }),
    defineField({
      name: 'languages',
      title: 'Languages',
      type: 'array',
      of: [{type: 'string'}],
      description: 'Ex: JavaScript, Python, Go',
    }),
  ],
})
// index.ts

import repo from 'repo.ts'
export const schemaTypes = [
  ...,
  repo
]
Note: Be careful with your environment variables as SANITY_STUDIO prefix may expose them in the client side. Please refer to sanity docs

Copy into utils.ts to initialize necessary clients

//utils.ts
import {createClient} from '@sanity/client'
import {graphql} from '@octokit/graphql'

// sanity client
export const sanityClient = createClient({
  projectId: process.env.SANITY_STUDIO_PROJECT_ID,
  dataset: process.env.SANITY_STUDIO_.DATASET,
  useCdn: false, // set to `false` to bypass the edge cache
  apiVersion: '2023-05-03', // use current date (YYYY-MM-DD) to target the latest API version
  token: process.env.SANITY_STUDIO_.SANITY_SECRET_TOKEN
})

// github graphql with auth
export const graphqlWithAuth = graphql.defaults({
      headers: {
        authorization: 'bearer ' + process.env.SANITY_STUDIO_GITHUB_TOKEN,
      },
})

Add it as a widget within dashboard in sanity.config.ts (or .js):

import {defineConfig} from 'sanity'
import {sanityClient,graphqlWithAuth } from '@/utils.ts'
import {
  dashboardTool,
} from '@sanity/dashboard'
import {GithubReposListWidget} from 'repos-to-sanity'

export default defineConfig({
  //...
 plugins: [
    ...,
    dashboardTool({
      widgets: [
        ...,
        // Example Here
        GithubReposListWidget({
          sanityClient,
          graphqlWithAuth,
          login: "GITHUB_USERNAME",
          first: 5,
          layout: {
            width: "auto",
            height: "auto"
          }
        }),
      ],
    }),
  ],
})

Configuration

Name Description Type
cleint The sanity client instance to be used to perform queries. SanityClient
first The first n repositories to be fetched Default = 15 . number
graphqlWithAuth The octokit client used to fetch github's graphql api. graphql
login The github login, for example 'vinceflores' string
isFork Determines if a repository is a fork boolean
visibility The visibility of the repository. 'PUBLIC' or 'PRIVATE' string
layout Configures the width and height of the widget width/height : ['auto', 'full', 'large', 'small', 'medium' ]

License

MIT © vinceflores

Develop & test

This plugin uses @sanity/plugin-kit with default configuration for build & watch scripts.

See Testing a plugin in Sanity Studio on how to run this plugin with hotreload in the studio.

Release new version

Run "CI & Release" workflow. Make sure to select the main branch and check "Release new version".

Semantic release will only release on configured branches, so it is safe to run release on any branch.

About

Seamlessly import your github repositories to Sanity Studio CMS

Topics

Resources

License

Stars

Watchers

Forks