micalevisk / micalevisk.github.io

Site pessoal para listar TODOS os meus repositórios do GitHub
https://micalevisk.github.io
0 stars 0 forks source link

Usar o Webtask para a consulta #9

Closed micalevisk closed 6 years ago

micalevisk commented 6 years ago

inspirado em https://github.com/stursby/hasvuepassedreactyet

Usar o https://webtask.io com um endpoint que realizará a consulta à API GraphQL do GitHub, afim de esconder os tokens privados.

micalevisk commented 6 years ago

HOW TO

Criar um diretório functions que será a raiz do projeto para o Webtask

mkdir -p functions
cd functions
npm init -y
npm i -S axios

npm i -g wt-cli
wt create fetchMicaleviskRepos.js

Para refletir as atualizações nesse diretório, executar cd functions && wt update fetchMicaleviskRepos fetchMicaleviskRepos.js (pode ser um npm script com nome wt:update)

OBS

micalevisk commented 6 years ago

sample

fetchMicaleviskRepos.js

// inspirado em https://github.com/stursby/hasvuepassedreactyet/blob/master/functions/fetchGithubStars.js

const axios = require('axios');

// https://developer.github.com/v4/explorer
const gitHubGrapQLAPI = {
  baseURL: 'https://api.github.com',
  endpoint: 'graphql',
  queries: {
    getRepositories: (numberOfRepos = 100, numberOfLangs = 10) => `
      query {
        viewer {
          bio
          repositories(first: ${numberOfRepos}, orderBy: { field: CREATED_AT,  direction: DESC }) {
            edges {
              node {
                ...repoInfo
                languages(first: ${numberOfLangs}) {
                  edges {
                    node {
                      name
                      color
                    }
                  }
                }
              }
            }
          }
        }
      }

      fragment repoInfo on Repository {
        name
        url
        description
        homepageUrl
        createdAt
        updatedAt
        isFork
        isPrivate
        owner {
          login
        }
      }
    `
  }
};

/**
 * @param context {WebtaskContext}
 */
module.exports = function(context, cb) {
  const { GITHUB_TOKEN } = context.secrets;
  const { baseURL, endpoint, queries } = gitHubGrapQLAPI;

  // Github GraphQL axios instance
  const github = axios.create({
    baseURL,
    headers: {
      'Authorization': `Bearer ${GITHUB_TOKEN}`
    }
  });

  github.post(endpoint, { query: queries.getRepositories() })
        .catch(err => {
          console.error(err);
          return cb(err);
        })
        .then(res => cb(null, res.data));
};

adicionar as tokens no Secrets do Webtask

micalevisk commented 6 years ago

Versão inicial (código apenas no Webtask) concluída no merge f24bcb66b0fe7c2a3e623f8cf414775996d30a2d vide PR #10

resta implementar usando o Node

micalevisk commented 6 years ago

feito em a758b6dedb0c0ac441b0d43544abbbda862c0a5f