Concepção de Projeto Open Source: Automatizar o processo de criação de Issues e Milestones para um novo projeto no GitHub.

Introdução

Fala pessoal, sou novo por aqui, vim pelo curso do Filipe. Acabei de passar pela aula onde ele explica como utilizar as Issues e Milestone para mensurar o progresso de um projeto, e também para registar a features e a concepção do projeto. A questão é, direto tenho uma nova idéia de projeto e é um processo bem trabalhoso em pensar como estruturar ele, nas features que quero, modelagem, requisitos funcionais e não funcionais, etc. Se não bastasse esse processo ser trabalhoso, criar Issues e Milestones para quebrar tudo isso, se torna ainda mais penoso. A idéia, é tentar facilitar um pouco desse processo. Há um tempo tenho tido vontade de aprender Web Scraping, e também trabalhar num projeto Open Source. Pensei que essa pode ser a oportunidade perfeita de juntar tudo isso e tentar lapidar toda essa idéia.

Idéia inicial

A princípio, quero criar um script que recebe um arquivo de documentação(JSON), e a partir desse documento, onde ja temos todos requisitos divididos em Milestones e Issues separadas. Simplesmente interagir com a interface do GitHub e criar todas esses recursos no repositório.

Dúvidas

Que tecnologia usar? A princípio pensei no Selenium. Qual a dimensão do projeto? A princípio acredito ser uma implementação básica, mas com ajuda de vocês podemos fazer algo bem massinha. HEHEHE

O grande problema

Não sei praticamente nada sobre Web Scraping, tampouco sei fazer um Hello Word em python para utilizar o Selenium. Além disso, acredito que essa idéia pode ser melhor discutida, e queria abrir para galera aqui do TabNews participar, e me ajudar a lapidar a idéia. Acredito ser uma oprtunidade bacana para nós trabalharmos juntos e construir um projeto Open Source que pode ser muito útil, e na minha visão tem possibilidade de crescer e ganhar novas features bacanas.

Preciso de você

Vou deixar aqui, o link para o repositório que criei, ainda vazio. Se você quiser participar, por favor, entre em contato, aqui pelos comentários, e vamos construir algo massa juntos. Caso não queira participar, mas tiver algum conhecimento que possa ajudar, vou deixar algumas perguntas, se puder ajudar com alguma idéia, sugestão, ficarei muito grato

Perguntas

  • Você achou essa idéia util?
  • Você percebeu alguma inconsistência?
  • Tem alguma sugestão?
  • O que sabe sobre Web Scrapping que possa nos ajudar nesse processo?
  • O Selenium atende o que precisamos para essa implementação?
  • Ja existe alguma solução pronta para essa aplicação?
  • Tem idéias de funcionalidades?
  • Como podemos estruturar esse projeto?

Essas são apenas algumas perguntas que se passaram na minha cabeça no momento que estou escrevendo esse artigo, se surgir mais alguma, vou atualizando aqui. Mas por favor, se tiver algo que queira compartilhar, deixei aqui em baixo e vamos aperfeiçoando a idéia.

Sugestões de implementação

  • Selenium(python) + Arquivo documentação(MD, YML, JSON)

    • Prós: ???
    • Contras: E se a interface do GitHub mudar?
  • API GitHub + YAML Front Matter? Arquivo documentação(MD, YML, JSON)

    • Prós: ???
    • Contras: ???
  • GitHub CLI + Bash Script + Arquivo documentação(MD, YML, JSON)

    • Prós: ???
    • Contras: Não seria possível fazer uma implementação de uma aplicação WEB para disponibilizar

Olá! Teria interesse em paricipar mas tenho algumas ressalvas. Para interagir com o repositório e criar os milestones seria muito mais interessante usar a API ao invés de uma automação de browser com selenium (https://docs.github.com/en/rest/issues?apiVersion=2022-11-28)

Quanto a criar estas outras features, acho que seria bem simples, a partir de um modelo pre-definido ou algum markdown com metadados faça essa separação e lance via api no repositório

Massa, não sabia que poderiamos fazer isso diretamente pela API do GitHub(que inocência minha HAHAHA). Como acha que poderiamos consumir essa API, um lugar onde possamos inputar um arquivo e termos o resultado esperado. Ou você sugere fazer de outra forma que não usando um arquivo. Um detalhe, que não mencionei, a minha idéia de usar um arquivo, é por que é como eu me organizo, e queria facilitar para usar algo que não precisa de uma camada intermediaria de "tradução" entre a documentação que escrevi e a criação das Milestones e Issues.
O ideal é que o arquivo siga um padrão, o tipo eu acho que pouco importa, vai mudar a forma que tu vai fazer o parsing deles, eu costumo trabalhar com markdown ou mdx. Vamos supor que tu tenha um arquivo de um projeto, tu pode definir um tipo de marcação para metadados. """ ## YAML Front Matter https://stackoverflow.com/questions/44215896/markdown-metadata-format Ou seja, tudo abaixo de determinado metado vai se refirir a algo, então quando tu for parsear o documento tu vai conseguir dividir melhor na estrutura que tu precisa enviar via api. Tem bastante parsers de markdown disponíveis e um uma forma que geradores de sites estáticos usam.
Interessante, então pelo que entendi, poderiamos usar YAML para definir os requisitos, e dentro dele próprio adicionar metadados referenciando o que queremos que seja criado, Milestones e Issues no caso. Entendi certo? Se sim, tem uma questão, conseguimos dentro desses metadados criar os relacionamentos entre Milestones e Issues? Por exemplo: Milestone - 01: Issue - X: Issue - Y:
Ai depende, pode fazer o que tu quiser, no próprio metadado do pode referencia a qual milestone ele pertence ou ver de outra maneira. Mas acho que o ideal seria primeiro tu começar a ver se consegue realmente fazer o parsing desse MD/MDX ou até um DOC se for o caso.
Show vou trabalhar nisso. Tentar traçar um fluxo para definir como trabalhar com esse arquivo é o ideal nesse momento.

balavalda, encontrei um alternativa provisória que pode ser uma solução, pesquisando encontrei sobre o GItHub CLI, achei bem interessante e comecei a explorar um pouco. Estou escrevendo uma documentação básica aqui. Se puder dar uma olhada pra ver como ta ficando. A minha ideia é usar o github cli com um script bash. Claro que podemos evoluir isso, mas com as ferramentas que tenho, acho que é um bom começo.