GitHub Actions에서 dotfiles 자동 테스트

소개



저는 평소 Mac에서 작업하고 있지만 Linux에 dotfiles를 가져 가고 싶을 수 있습니다.
하지만 언제나 에러가 나오므로 곤란해 버립니다.
(새 Mac을 다시 설정하는 경우에도 마찬가지)

그래서 dotfiles의 품질을 유지하기 위해 GitHub Actions을 사용하여 CI를 사용해 보았습니다.
  • 테스트 항목
  • 런타임 오류 검사 (Mac, Linux)
  • 설치 스크립트 (심볼릭 링크 만들기) 실행
  • .bash_profile.bashrc 불러오기
  • brew bundle 실행(Mac 전용)

  • 정적 분석
  • Shell Script (설치 스크립트, .bash_profile, .bashrc)
  • Vim Script (init.vim)
  • TOML ( dein.vim )



  • (자신의 리포지토리에 PR하는 습관이 없기 때문에, 항상 master에 직접 push하고 있습니다)
    git의 내용이 변경되면 자동으로 테스트가 실행됩니다.


    배지
    의미




    <「Linux라면 또 에러가 나올거야. 유감w」



    < "예쁘게 쓸 수있어 좋다!"


    라고 말할 수 있습니다.

    dotfiles 구성



    rtakasuke/.dotfiles at 기사 게시 시점
    $ tree -a -I ".git|.gitignore|archive|gitconfig|iTerm2|tigrc|README.md"
    .
    ├── .github
    │   └── workflows
    │       ├── lint.yml     # 静的解析用ワークフロー
    │       ├── linux.yml    # 実行時エラーチェック用ワークフロー (Linux)
    │       └── macos.yml    # 実行時エラーチェック用ワークフロー (Mac)
    ├── Brewfile
    ├── bash_profile
    ├── bashrc
    ├── bin
    │   └── init.sh          # セットアップスクリプト ( $HOME にシンボリックリンクを作成 )
    └── nvim                 # Neovim + dein.vim の設定ファイル
        ├── dein.toml
        ├── dein_statusline.toml
        └── init.vim
    

    GitHub Actions 워크플로


    .github/workflows에 yaml 파일을 넣어 설정을 설명합니다.
    자세한 구문은 다음을 참조하십시오.
  • GitHub Actions 워크플로 구문 - GitHub 고객센터

  • 런타임 오류 검사 ( Mac, Linux )


  • 워크 플로
  • macos.yml
  • linux.yml




  • Run brew bundle ( Mac )


    - name: Run brew bundle
      run: brew bundle
    
    Brewfile에 설명된 앱을 Mac에 설치할 수 있는지 테스트합니다.
  • 참고 : Homebrew/homebrew-bundle

  • Run init.sh


    - name: Run init.sh
      run: ${GITHUB_WORKSPACE}/bin/init.sh
    

    설치 스크립트 (심볼릭 링크 만들기)가 올바르게 작동하는지 테스트합니다.
    오류가 발생하면 종료 코드가 0이되지 않도록 스크립트 측에서 set -e 명령을 실행하고 있습니다.
  • 참고 : 쉘 스크립트에서 오류가 발생한 곳에서 비정상적으로 종료하고 싶습니다 - Qiita

  • Load .bash_profile & .bashrc


    - name: Load .bash_profile
      run: |
        bash ~/.bash_profile 2> error.log; cat error.log
        if [ -s error.log ]; then false; fi
    
    - name: Load .bashrc
      run: |
        bash ~/.bashrc 2> error.log; cat error.log
        if [ -s error.log ]; then false; f
    

    .bash_profile 또는 .bashrc를 읽을 때 표준 오류 출력이 없는지 테스트합니다.
    셋업 커맨드 때처럼 set -e 커맨드를 사용하면 쉘이 떨어져 버리기 때문에 고통의 책입니다.

    정적 분석


  • 워크 플로
  • lint.yml




  • Check bin/init.sh


    - name: Check bin/init.sh
      run: shellcheck ${GITHUB_WORKSPACE}/bin/init.sh
    

    shellcheck을 사용하여 설치 스크립트 작성에 문제가 없는지 테스트합니다.

    Check .bash_profile & .bashrc


    - name: Check .bash_profile
      run: shellcheck ${GITHUB_WORKSPACE}/bash_profile --exclude=SC2148,SC1090
    
    - name: Check .bashrc
      run: shellcheck ${GITHUB_WORKSPACE}/bashrc --exclude=SC2148,SC1090
    

    동일.
    그러나 일부 경고를 무시하도록 설정했습니다.

  • SC2148 : shebang이 쓰지 않을 때의 경고이지만 .bash_profile에 쓰는 것이 아니므로 무시

  • SC1090 : 외부 소스를 읽을 수 없기 때문에 경고이지만 무시.

  • Check nvim/init.vim


    - name: Check nvim/init.vim
      run: vint ${GITHUB_WORKSPACE}/nvim/*.vim -cstV --enable-neovim
    

    vint을 사용하여 Neovim 구성 파일을 작성하는 데 문제가 없는지 테스트합니다.

    Check nvim/*.toml


    - name: Check nvim/*.toml
      run: |
          curl -sL https://raw.githubusercontent.com/vmchale/tomlcheck/master/sh/check | sh || true
          find ${GITHUB_WORKSPACE}/nvim/*.toml -type f | xargs -I {} ${GITHUB_WORKSPACE}/tomlcheck --file {}
    

    tomlcheck을 사용하여 Neovim 플러그인을 설명하는 TOML 파일을 작성하는 데 문제가 없는지 테스트합니다.
    와일드카드를 사용할 수 없었기 때문에 고통의 방법입니다.

    마지막으로



    아직 개선의 여지는 많다고 생각하므로, 의견 주시면 기쁩니다.

    좋은 웹페이지 즐겨찾기