Настроить общедоступный рабочий процесс в SourceCraft

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

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

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

Чтобы настроить общедоступный рабочий процесс:

  1. Создайте общедоступный рабочий процесс.
  2. Запустите общедоступный рабочий процесс.

Создать общедоступный рабочий процесс

Примечание

Эта часть инструкции предназначена для пользователей, создающих общедоступный рабочий процесс, с минимальной ролью Разработчик репозитория.

  1. Если у вас еще нет репозитория, создайте его.

  2. Добавьте в ветку main репозитория файл .sourcecraft/ci.yaml с содержимым вашего рабочего процесса, например:

    workflows:
      professor-test:
        inputs:
          STUDENTREPO:
            type: string
            required: true
          TASK:
            type: string
            required: true
        settings:
          shared: true
        tasks:
          - name: professor-task
            cubes:
              - name: professor-cube
                script:
                  - |
                  	mkdir -p artifacts
                    echo "Repo: ${{ inputs.STUDENTREPO }}" > artifacts/professor-output
                    echo "Task: ${{ inputs.TASK }}" >> artifacts/professor-output
                artifacts:
                  paths:
                    - artifacts/professor-output
    
    on:
      push: professor-test
    

    Где параметр settings:shared: true — разрешение запускать рабочий процесс всем участникам организации.

    Важно

    Все общедоступные запуски рабочего процесса осуществляются от имени пользователя, который последним добавил изменения в файле .sourcecraft/ci.yaml в основной ветке.

    Если файл .sourcecraft/ci.yaml в основной ветке был обновлен напрямую через git push origin main с использованием персонального токена (PAT) с ограниченным временем жизни, соответственно, рабочий процесс будет общедоступным только в течение этого времени жизни.

Запустить общедоступный рабочий процесс

Примечание

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

Запустить общедоступный рабочий процесс можно изнутри другого рабочего процесса с помощью специального кубика cr.yandex/sourcecraft/cubes/shared-workflows:latest или с помощью API.

Во входные параметры запуска передаются:

  • слаг репозитория, в котором находится рабочий процесс;

  • слаг организации;

  • название рабочего процесса;

  • (опционально) параметры inputs, например ссылка на клонирование репозитория, из которого происходит запуск;

  • (опционально) указание на результат выполнения — artifacts.

    Важно

    Чтобы получить артефакты из общедоступного рабочего процесса, передайте названия задания и кубика, а также локальный путь артефакта в переменные окружения кубика cr.yandex/sourcecraft/cubes/shared-workflows:latest или в отдельном вызове API.

  1. Если у вас еще нет репозитория, создайте его.

  2. Добавьте в ветку main репозитория файл .sourcecraft/ci.yaml с содержимым рабочего процесса, который будет запускать публичный рабочий процесс, например:

    workflows:
      check-solution:
        tasks:
          - name: main
            cubes:
              - name: run-shared-workflow
                image: cr.yandex/sourcecraft/cubes/shared-workflows:latest
                env:
                  ORG_SLUG: professor-org
                  REPO_SLUG: professor-repo
                  WORKFLOW_NAME: professor-test
                  WORKFLOW_VALUES: '[{"name": "STUDENTREPO", "value": "student"}, {"name": "TASK", "value": "task-1"}]'
                  TASK_NAME: professor-task
                  CUBE_NAME: professor-cube
                  ARTIFACT_LOCAL_PATH: artifacts/professor-output
                artifacts:
                  paths:
                    - artifacts/output
    
    on:
      push: check-solution
    

    В соответствии с конфигурацией CI/CD рабочий процесс запустится автоматически при внесении изменений в ветку. Также вы можете запустить его вручную.

  3. Проверьте выполнение CI-процесса:

    1. На странице репозитория в разделе Автоматизации перейдите в секцию CI/CD.

    2. Откройте запущенный рабочий процесс.

      На открывшейся странице будут отображены задания рабочего процесса, шаги задания — кубики, а также статусы и результаты выполнения.

    3. В правом нижнем углу кубика run-shared-workflow нажмите .

    4. Дождитесь завершения рабочего процесса.

  1. Создайте персональный токен (PAT).

  2. Запустите общедоступный рабочий процесс, передав в теле запроса параметр "shared": true:

    export PAT=<персональный_токен>
    
    cat > body.json << 'EOF'
    {
      "workflows": [
        {
          "name": "professor-test",
          "values": [
            {
              "name": "STUDENTREPO",
              "value": "student"
            },
            {
              "name": "TASK",
              "value": "task-1"
            }
          ]
        }
      ],
      "shared": true
    }
    EOF
    
    curl \
      --request POST \
      --header "Authorization: Bearer $PAT" \
      --data '@body.json' \
      --url "https://api.sourcecraft.tech/<слаг_организации>/<слаг_репозитория>/cicd/runs"
    

    Важно

    Запустить общедоступный рабочий процесс можно только в основной ветке репозитория и только с конфигурацией CI/CD из основной ветки. Передача в теле запроса параметров head и config_revision приведет к ошибке выполнения.

    Сохраните значение слага запуска (slug), полученное в ответе.

  3. Получите статус запущенного рабочего процесса:

    curl \
      --request GET \
      --header "Authorization: Bearer $PAT" \
      --url "https://api.sourcecraft.tech/<слаг_организации>/<слаг_репозитория>/cicd/runs/<слаг_запуска>"
    

    Примечание

    Доступ к статусу и артефактам общедоступного рабочего процесса возможен только с тем же персональным токеном (PAT), с которым он был запущен.

  4. Получите артефакты запущенного рабочего процесса:

    curl \
      --request GET \
      --header "Authorization: Bearer $PAT" \
      --url "https://api.sourcecraft.tech/<слаг_организации>/<слаг_репозитория>/cicd/artifacts/<слаг_запуска>/professor-test/professor-task/professor-cube"
    

Подробнее см. на странице Работа с REST API SourceCraft.

См. также