Как создавать и сохранять файлы с помощью PowerShell в действии GitHub?

Я новичок в действиях GitHub, я хочу использовать PowerShell и сохранять вывод команды в файл в моем репозитории, но я не знаю, как это сделать правильно.

name: get hash
on: [workflow_dispatch]

jobs:
    build:
      name: Run Script
      runs-on: windows-latest
      steps:
        - uses: actions/checkout@v3
        - name: Script
          run: ./script.ps1
          shell: pwsh

и с помощью команды get-filehash я пытаюсь научиться создавать простой рабочий процесс Github, который сохраняет хэш файла в текстовый файл в моем репозитории.

это содержимое файла script.ps1

$wc = [System.Net.WebClient]::new()
$pkgurl = 'File on the web'
$FileHashSHA512 = Get-FileHash -Algorithm SHA512 -InputStream ($wc.OpenRead($pkgurl))    
$FileHashSHA512.Hash > .\sss.txt

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

Я также хочу, чтобы эта команда работала в том же рабочем процессе:

Invoke-WebRequest -Uri $pkgurl -OutFile .\file.zip

но опять же не знаю как заставить рабочий процесс сохранять файл в корень репозитория.

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Средство запуска действий — это просто ПК, который клонирует репозиторий и запускает в нем несколько команд. Поэтому, когда вы создаете новый файл в runner, вы должны добавить его в репозиторий в runner, создать коммит и отправить его в репозиторий на GitHub.

Это может помочь понять, что репозиторий в GitHub и бегун в действиях GitHub — это две совершенно разные вещи. Это не похоже на то, что средство запуска действий каким-то образом запускается «внутри» вашего репо.

Таким образом, один из способов сохранить файл — запустить:

git add fileyoujustcreated.txt
git commit -m "updating file"
git push

Вот пример действия GitHub, которое я использую для обновления файла в своем репозитории каждый раз при изменении содержимого:

Кроме того, вы можете редактировать файлы в GitHub с помощью REST API, чтобы вы могли вызывать:

curl \
  -X PUT \
  -H "Accept: application/vnd.github+json" \
  -H "Authorization: Bearer <YOUR-TOKEN>"\
  -H "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/repos/OWNER/REPO/contents/PATH \
  -d '{"message":"my commit message","committer":{"name":"Monalisa Octocat","email":"[email protected]"},"content":"bXkgbmV3IGZpbGUgY29udGVudHM = "}'

Или аналог в PowerRhell.

Вы можете использовать переменную ${{ GitHub.token }} для аутентификации.

Видеть:

Спасибо, команда git add fileyoujustcreated.txt работает, только если я сохраню файл из скрипта PowerShell в корневую папку, верно? вот так $FileHashSHA512.Hash > .\sss.txt, если бы я например сделал это $FileHashSHA512.Hash > .\folder1\folder2\sss.txt то я должен был бы сделать это git add \folder1\folder2\fileyoujustcreated.txt ?

user20682592 02.02.2023 10:07

Конечно. Хотя, если вы изменяете только файлы, вы можете просто использовать git add . для рекурсивного добавления всех измененных файлов. В этом случае вы должны убедиться, что у вас есть хороший файл .gitignore.

jessehouwing 02.02.2023 10:09

Ваш рабочий процесс очень помог мне понять кучу вещей, спасибо за это, я использовал тот же шаблон для своего собственного рабочего процесса, и он был успешным. но мне интересно, как это на самом деле работает. потому что вы используете $readme = Get-Content -raw -path "README.md" без использования - uses: actions/checkout@v3. так что, если эти действия Github сначала не проверяют ваш репозиторий, как бегущая виртуальная машина, выполняющая ваше действие, узнает, что нужно получить содержимое файла Readme.md из вашего репозитория? как вы сказали, это две разные вещи (виртуальная машина бегуна и репозиторий GitHub)

user20682592 02.02.2023 11:49

Файл, на который вы смотрите, представляет собой составное действие, а не полный рабочий процесс. Это называется здесь: github.com/jessehouwing/jessehouwing/blob/…

jessehouwing 02.02.2023 14:50

Другие вопросы по теме