Как использовать свой собственный файл Makefile в действиях на github?

#continuous-integration #github-actions

Вопрос:

Я пытаюсь автоматизировать конвейер CI/CD с помощью действий github. У меня есть файл Makefile, как показано ниже:

 .virtualenv:
    virtualenv -p python3 .virtualenv
    . .virtualenv/bin/activate; 
    pip install -r requirements.txt -r requirements_test.txt

clean:
    find . -name __pycache__ -exec rm -rf {}  
    rm -rf *.egg-info
    rm -rf .virtualenv/


test: .virtualenv
    (. .virtualenv/bin/activate; 
    pycodestyle --max-line-length=79 app test; 
    nosetests --with-coverage --cover-tests --cover-min-percentage=80 --cover-package=app test)

build: test clean

.PHONY: test clean
 

Я хочу использовать действия github для автоматизации этого рабочего процесса. Я настроил свой рабочий процесс на github следующим образом:

 name: python-app

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - name: build application
      run: make build
 

Я хочу, чтобы, когда есть толчок к мастеру или создается PR против мастера, рабочий процесс должен быть запущен. Я знаю, что существует стандартный шаблон для тестирования приложений python, приведенный здесь: https://docs.github.com/en/actions/guides/building-and-testing-python#testing-your-code но я хочу сделать это через свой собственный файл Makefile. Когда я запускаю это, я получаю эту ошибку:

каждый шаг должен определять uses run ключ или

Любые зацепки в этом отношении были бы полезны. Спасибо

Комментарии:

1. Самый простой обходной путь-закрепите весь процесс, а затем используйте команду docker только на стороне CI (действия на GitHub). Если вы выполняете докеризацию, она становится совместимой между любыми CI, и вам не нужно приспосабливаться к конкретной среде. Как правило, это лучшая практика для всех проблем, таких как то, что не работает в среде CI.

2. Да, действительно, я бы докеризовал его, сделал сборку, в конечном итоге запустил бы тестирование и построил докер

3. Я думаю, что комментарий от @taledor очень интересен. Мне не нравится тот факт, что я не могу создавать локально с помощью действий GH и иметь файл Dockerfile для моей сборки, а не GH . yaml для действий, похоже, это может быть победой.

Ответ №1:

Если вы хотите выполнить файлы из текущего репозитория, вам необходимо использовать действия/проверку

Это позволит вам получить доступ к репозиторию $github_workspace (одной из переменных среды Github) в вашем рабочем процессе.

Например, учитывая, что ваш Makefile файл находится в корне репозитория, вы могли бы использовать что-то вроде этого:

    name: python-app

   on:
     push:
       branches: [ master ]
     pull_request:
       branches: [ master ]

   jobs:
    build:
      runs-on: ubuntu-latest
      steps:
      - name: checkout repo
        uses: actions/checkout@v2
      - name: build application
        run: make build
 

Вот еще один пример рабочего процесса из личного хранилища, следуя той же логике, если вы хотите выполнить определенный сценарий для выполнения какой-либо операции.