다른 리포지토리에 자동으로 푸시하는 Github 작업

4482 단어 blogging

다른 리포지토리에 자동으로 푸시하는 Github 작업





콘텐츠를 다른 저장소로 자동으로 푸시하기 위해 일부 저장소가 필요했던 적이 있습니까?

이에 대한 몇 가지 이유가 있을 수 있습니다. 아마도 주 저장소가 아직 공유할 수 없거나 일부 콘텐츠를 다른 저장소에서 제외하고 싶을 수 있습니다. 개인 및 부분적으로 공개됩니다.

최근에 Medium에 게시물을 쓰기 시작했기 때문에 게시물을 더 나은 방식으로 정리하고 싶을 때 그렇게 할 필요가 있었습니다. 게시물 작성 생활을 편하게 하기 위해 Brian Mayo의 Githubaction를 사용하여 게시물을 Medium에 자동으로 게시했습니다. Markdown 형식으로 포스트를 작성하고 Github에 푸시하기만 하면 됩니다. 블로그 저장소는 게시물에 사용된 샘플 코드의 저장 공간 역할도 하므로 항상 공개적으로 사용할 수 있습니다.

그럼에도 불구하고 게시물의 일부가 미디엄 회원만 액세스할 수 있는 날이 올 수 있다는 것을 깨달았을 때 게시물에 사용된 코드를 공개적으로 사용할 수 있도록 하면서 콘텐츠를 별도의 저장소에 비공개로 유지해야 했습니다. git submodule, 암호화된 마크다운을 고려한 후 현재 블로그 저장소(게시물과 코드가 모두 포함된)를 비공개로 유지하고 공유 코드만 다른 공용 저장소로 내보내는 추가 Github 작업을 수행하기로 결정했습니다.

그때 Carles Pina Estany에서 Github action가 사례에 유용하다는 것을 알았습니다.

더 잘 설명하기 위해 사용 사례를 모방하기 위해 mock-medium-sourcemock-medium-output을 만들었습니다.
mock-medium-source에서 파일 구조는 다음과 같습니다.

├── .github
│   ├── workflows
│   │   ├── medium-publish.yml
├── posts
│   ├── 001
│   │   ├── files
│   │   │   ├── Makefile
│   │   │   ├── mock.cpp
│   │   ├── post1.md
│   ├── 002
│   │   ├── files
│   │   │   ├── Makefile
│   │   ├── note.txt
│   │   ├── post2.md
├── README.md


Medium의 게시물은 .md 파일에서 생성되며 posts/<number>의 나머지 콘텐츠는 게시물에 대한 참조 코드 또는 정보입니다.

따라서 비공개로 유지해야 하는 것은 마크다운 파일이 될 것입니다. 게시물의 내용이 없으면 공유 코드가 덜 의미가 있을 것이기 때문입니다. Github Gist은 코드와 스니펫을 공유하는 데 널리 사용되는 방법이지만 현재로서는 코드를 쉽게 컴파일하고 실행하기 위해 코드를 Makefile 또는 CMakeLists.txt와 함께 한 곳에 보관하는 것을 선호합니다. 나는 mock-medium-source를 푸시하기 전에 mock-medium-output에서 해당 개인 콘텐츠를 필터링하기 위해 멋진 작업을 사용하지 않았습니다. 현재는 다른 리포지토리로 푸시하기 전에 해당 마크다운 파일을 간단히 삭제하는 것입니다.
mock-medium-output 저장소의 예상 파일 구조는

├── posts
│   ├── 001
│   │   ├── files
│   │   │   ├── Makefile
│   │   │   ├── mock.cpp
│   ├── 002
│   │   ├── files
│   │   │   ├── Makefile
│   │   ├── note.txt

mock-medium-source의 Github 워크플로에 대한 yaml 파일은 다음과 같습니다(SSH_DEPLOY_KEY에 대한 비밀을 생성해야 함).

name: Publish to Medium

"on":
  push:
    branches:
      - master
    paths:
      - 'posts/**'

jobs:
  post:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Creates output folder and remove markdown
        run:  |
              mkdir output
              rm -rf posts/*/*.md
              cp -r posts output
      - name: Pushes to public repository
        id: push_directory
        uses: cpina/github-action-push-to-another-repository@ssh-deploy-key
        env:
          SSH_DEPLOY_KEY: ${{ secrets.WORKFLOW_DEPLOY_KEY }}
        with:
          source-directory: output/
          destination-github-username: 'pllee4-Experimental'
          destination-repository-name: 'mock-medium-output'
          user-email: [email protected]
          commit-message: pushed from $GITHUB_REF
          target-branch: master


이 yaml 파일의 경우 기록해야 할 두 가지 사항이 있습니다.
  • 공개 리포지토리mock-medium-output를 생성해야 mock-medium-source에서 푸시할 수 있습니다.
    ("작성"은 소스 리포지토리의 대상 분기로 유효한 분기를 갖기 위해 최소 하나의 커밋으로 푸시됨을 의미합니다.)
  • Github 워크플로에서 경로는 posts/** 입니다. 즉, mock-medium-source 의 워크플로 실행은 posts 아래의 디렉터리에 변경 사항이 있는 경우에만 트리거됩니다. 이것은 내 사용법에 적합하지만 원하는 경우 이 부분을 제거할 수 있습니다.

  • 그게 다야! Markdown 형식을 사용하여 게시물을 계속 작성할 수 있으며 워크플로에서 관련 공개 콘텐츠를 자동으로 푸시하여 귀하와 공유하도록 할 수 있습니다!

    감사합니다. 도움이 되었기를 바랍니다.

    좋은 웹페이지 즐겨찾기