Как создать папку в рабочем процессе github?

#linux #github #github-actions #building-github-actions

Вопрос:

Я пытаюсь скопировать содержимое папки в другую во время рабочего процесса на github. Я знаю, что рабочий процесс может создавать новые папки и файлы, потому что вызов сборки в проекте react создает сборку, которой нет в проекте, но она выдает ошибку в последующей команде запуска, которая использует mkdir.

Ошибка: mkdir: cannot create directory ‘myNewFolder’: No such file or directory

Мой вопрос в том, как достичь того или иного

 > mkdir myNewFolder amp;amp; cp -R myOldFolder myNewFolder
 

или

 > cp -R myOldFolder myNewFolder
 

чтобы работать, когда myNewFolder не существует в рабочем каталоге репозитория/рабочего процесса?

ИЗМЕНИТЬ (запрошенный файл рабочего процесса)

 name: Test Server Build and Deploy (CD)

on:
  push:
    branches:
        - cd_branch

jobs:
  deploy:
    runs-on: ubuntu-latest
    env: 
        MY_APP_ENV_VARIABLE:  ${{ secrets.ENV_VARIABLE}}

steps:
        - uses: actions/checkout@v2
        - uses: actions/setup-node@v2
          with:
              node-version: '14.15.4'
        - run: npm cache clean --force
        - run: npm run copy-script
 

Где находится мой сценарий копирования:
"copy-script": "mkdir existingFolder/newFolder1/newFolder2 amp;amp; cp -R oldfolder/sub existingFolder/newFolder1/newFolder2"

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

1. Какую ошибку вы получили?

2. Извините, добавил это сейчас к вопросу.

3. Эта ошибка не связана с git. возможно, у вас недостаточно разрешений для создания новой папки. каков статус разрешения на чтение/запись/выполнение вашей текущей папки?

4. Если вы ссылаетесь на настройки действий GitHub, я выбрал «Рабочие процессы имеют разрешения на чтение и запись в репозитории для всех областей». для конкретного РЕПО, о котором идет речь.

5. Покажите минимальную версию файла рабочего процесса. mkdir и cp должны работать нормально, так же, как и на вашей локальной машине, в действиях GitHub.

Ответ №1:

При создании новой папки, вложенной в другую, добавьте -p опцию (parants) после mkdir , чтобы указать Linux, чтобы все каталоги были перечислены в пути.

Я попробовал с этим, и это работает для меня:

 name: SO-023 Create folder

on:
  push:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Create folder
        run: |
          mkdir -p myNewFolder/myNewSubFolder amp;amp; cp -R dist myNewFolder/myNewSubFolder
          ls myNewFolder/MyNewSubFolder
          
 

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

1. Что случилось с символом трубы? Это необходимо для выполнения команд amp;amp; в рабочем процессе или что-то в этом роде?

2. Извини, я не понимаю. Не могли бы вы объяснить? У вас есть какие-либо проблемы с трубой?

3. Спасибо, если вы одобрите правку, я могу принять это как ответ. Я думаю, что на самом деле это была не проблема github.

4. Это не правильно, это не была проблема с Github. Но я рад, что мы решили эту проблему. Я также одобрил редактирование.

5. Я думаю, что труба после run -это синтаксис YAML. Это означает, что строки с отступом под ним являются строкой, @Mr. Drew. Он используется только тогда, когда строка будет находиться в отдельной строке от ключа. Значения рядом uses: и тому подобное также являются строками, но они находятся в одной строке рядом : , поэтому вы не используете там канал.