Автоматизация Exercism.io с pytest и контролем версий - PullRequest
0 голосов
/ 03 июля 2018

CI новичок здесь. В настоящее время я работаю над треком Python для Exercism.io . Я ищу способ автоматизировать процесс запуска тестов из pytest, фиксации и отправки на github и, наконец, подчинения упражнениям, если все тесты пройдут. Я реализовал хук pre-commit для вызова тестов при коммите, но я не уверен, как передать имя файла обратно в упражнение для отправки. Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 06 июля 2018

Я собрал решение для тех, кто ищет подобный рабочий процесс. Он использует скрипт Python в корневом каталоге и обрабатывает команды git через подпроцесс. Он также поддерживает автозаполнение для файлового каталога (на основе this gist ). В этом сценарии предполагается, что вы уже инициализировали репозиторий git и также настроили удаленное репо.

#!/usr/bin/env python

import pytest
import subprocess
import readline
import glob

class tabCompleter(object):
    """ 
    A tab completer that can complete filepaths from the filesystem.

    Partially taken from:
    /5684442/zavershenie-vkladki-v-python-rawinput
    """

    def pathCompleter(self,text,state):
        """ 
        This is the tab completer for systems paths.
        Only tested on *nix systems
        """
        return [x for x in glob.glob(text+'*')][state]

if __name__=="__main__":
    # Take user input for commit message
    commit_msg = raw_input('Enter the commit message: ')

    t = tabCompleter()

    readline.set_completer_delims('\t')

    # Necessary for MacOS, Linux uses tab: complete syntax
    if 'libedit' in readline.__doc__:
        readline.parse_and_bind("bind ^I rl_complete")
    else:
        readline.parse_and_bind("tab: complete")

    #Use the new pathCompleter
    readline.set_completer(t.pathCompleter)

    #Take user input for exercise file for submission
    ans = raw_input("Select the file to submit to Exercism: ")

    if pytest.main([]) == 0:
        """
        If all tests pass: 
        add files to index,
        commit locally,
        submit to exercism.io,
        then finally push to remote repo.
        """
        subprocess.call(["git","add","."])
        subprocess.call(["git","commit","-m", commit_msg])
        subprocess.call(["exercism","submit",ans])
        subprocess.call(["git","push","origin","master"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...