Skip to content
This repository was archived by the owner on May 9, 2022. It is now read-only.
/ duis Public archive

❌ 🔒 🚧 Utilitário/framework para (tentar) automatizar a correção dos exercícios da disciplina Programação para Web

Notifications You must be signed in to change notification settings

micalevisk/duis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

149 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Duis

Feito em cima do Shelljs e inquirer

/* TODO: finalizar descrição */

Como usar

$ duis [PATH/TO/CONFIG-FILE] <PATH/TO/TRAB-FILE>
                                  |
                                  |
    relativo ao diretórío do "aluno" (AKA working dir; onde está o `.git`)

Demo

Exemplo de árvore do diretório a ser trabalhado
.
├── duis.questions.js
├── duis.config.js
├── Turma1
│   ├── __tests__
│   │   └── TRAB1.test.js
│   ├── nick-aluno-a # git repo
│   │   ├── TRAB1
│   │   │   └── index.html ## or `index.php`
│   │   ├── TRAB2
│   │   └── # ...
│   ├── nick-aluno-b
│   │   └── # ...
│   └── #...
└── Turma2
    └── #...
Exemplo do arquivo de configuração

Exemplificando o processo de execução

Iniciar processo com $ duis . TRAB1

  1. Carregar as configurações expostas no arquivo duis.config.js do diretório corrente (se não existir: exit 1)
  2. Fazer as perguntas definidas em CONFIG#startQuestions, para adicionar mais valores ao estado inicial
  3. Criar o diretório definido em CONFIG#lookupDirPathMask, se ele já não existir
  4. Para cada diretório resolvido da junção de CONFIG#workingdirParentDirPathMask (renderizado) e <PATH/TO/TRAB-FILE> (eg. TRAB1), tratá-lo como working dir e fazer:
    1. Entrar no diretĂłrio "root" do working dir corrente (eg. ./Turma1/nick-aluno-a)
    2. Executar os comandos definidos em CONFIG#commandsForEachRootDir.onEnter (perguntando antes de executar cada, se CONFIG#safeMode for true)
    3. Entrar no diretĂłrio working dir corrente (eg. ./Turma1/nick-aluno-a/TRAB1)
    4. Recuperar o id do Ăşltimo commit no diretĂłrio working dir, e fazer:
      1. Se o working dir tiver uma entrada para <PATH/TO/TRAB-FILE> no arquivo de lookup corrente (eg. ./Turma1/.duis.lookup/nick-aluno-a.json) e o id deste for igual a este commit, então esse "trabalho" não foi atualizado; pular essa iteração
      2. SenĂŁo, continuar o processo
    5. Se CONFIG#serverPort estiver definido, entĂŁo:
      1. Criar um servidor PHP no working dir
      2. Abrir o navegador definido em CONFIG#browser na raiz do server local
    6. SenĂŁo, abrir o navegador em working dir
    7. Se existir o arquivo de teste associado ao "trabalho" corrente, entĂŁo:
      1. Perguntar se deseja executar o comando definido em CONFIG#test.commandToRun (eg. testcafe -sf chrome:headless ./Turma1/__tests__/TRAB1.test.js)
      2. Executar o comando para (teoricamente) executar os testes
    8. Fazer as perguntas definidas no CONFIG#workingdirQuestions
    9. Esperar a resposta da pergunta "Finalizar avaliação de <rootName>?"
      1. Atualizar o arquivo de lookup correspondente
      2. Parar o servidor (se iniciado)
      3. Executar os comandos definidos em CONFIG#commandsForEachRootDir.onBeforeLeave (perguntando antes de executar cada, se CONFIG#safeMode for true)

Tips

  • Esc para fechar o programa (como o ctrl+c)
  • Em perguntas que fornecem um tab suggestions, as sugestões sĂŁo de nomes lidos de alguma fonte. Ex: As sugestões ao definir o identificador do trabalho no arquivo de lookup sĂŁo de identificadores em uso
  • As respostas ficam em destaque para indicar que se referem a algo já definido (no contexto da pergunta)

Formato do arquivo de "lookup" gerado pra cada working dir

o nome do arquivo deve ser o mesmo do diretório git em que o working dir está

{
  "<TRABNAME_CORRIGIDO>": {
    "_id": "<TRABNAME_CORRIGIDO_COMMIT_ID>", // commit que gerou os `prompts` abaixo
    "extra": { // retornado pela aplicação da função `CONFIG#lookupAttachExtra` sobre as respostas de `CONFIG#workingdirQuestions`
    },
    "prompts": [ // perguntas e respostas das questões definidas em `CONFIG#workingdirQuestions`
      {
        "q": "<QUESTION_NAME>",
        "a": "<ANSWER>"
      },
      // ...
    ]
  }
  // ...
}

About

❌ 🔒 🚧 Utilitário/framework para (tentar) automatizar a correção dos exercícios da disciplina Programação para Web

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •