僕なりの GitHub 備忘録

# actions

CI/CDパイプラインを形成する。

事前にやらないいけないこと。

- `composer.phar`をリポジトリ内に含める。

    > 参考：[https://getcomposer.org/download/](https://getcomposer.org/download/)

- サーバでgithubからのssh接続を設定する

- secretsにSSH_KEY（秘密鍵）を登録する。

    > 参考：[https://qiita.com/mkin/items/75a492e8a1fafe5eacd17](https://qiita.com/mkin/items/75a492e8a1fafe5eacd17)

- サーバ内にリモートリポジトリを作成する。

    > 参考：[https://eng-entrance.com/git-remote](https://eng-entrance.com/git-remote)

    ```bash
    mkdir -r ~/git && cd git
    git init --bare --share <remoteRepositoryName>.git
    ```

`deploy.yml`

```yaml
on:
  push:
    branches:
      - master
  workflow_dispatch:

name: Deploy to <serverName>
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: setting .ssh
        run: |
          mkdir -p ~/.ssh
          touch ~/.ssh/<rsaName>
          echo "${{ secrets.SSH_KEY }}" > ~/.ssh/<rsaName>
          chmod 600 ~/.ssh/<rsaName>
          touch ~/.ssh/config
          cat <<EOF > ~/.ssh/config
          Host <serverName>
          HostName        <hostName>
          Port            <port>
          User            <user>
          IdentityFile    /home/runner/.ssh/<rsaName>
          StrictHostKeyChecking no
          UserKnownHostsFile=/dev/null
          EOF
      - name: checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: master push to production repository
        run: |
          branch=$(git rev-parse --abbrev-ref HEAD)
          echo "BRANCH::${branch}" >> $GITHUB_OUTPUT
          git remote add production ssh://<serverName>/~/git/<remoteRepositoryName>.git
          git push -f production ${branch}
          git remote -v
        id: set-current-branch
      - name: fetch and pull on server
        run: |
          ssh -tt <serverName> '\
            cd ~/path_to_app &&\
            git fetch -p production &&\
            git checkout production/${{ steps.set-current-branch.outputs.BRANCH }} &&\
            /usr/local/bin/php-8.1 composer.phar install &&\
            [rm -rf ~/<cache> &&\]
            exit
          '
      
```



前ステップの値を参照する

> 参考 [https://atsum.in/linux/github-actions-previous-output/](https://atsum.in/linux/github-actions-previous-output/)

後ステップで参照するための設定

- 後続のステップから参照するために`id`をつける。
- `変数名=値` を `echo` して `$GITHUB_OUTPUT` に出力する

```yaml
jobs:
  test-job:
    - name: setup vars
      id: setup-vars
      run: |
        echo "foo=FOO" >> $GITHUB_OUTPUT
        echo "bar=BAR" >> $GITHUB_OUTPUT
        TODAY=$(date +"%Y-%m-%d")
        echo "baz=${TODAY}" >> $GITHUB_OUTPUT    
```

前ステップの値を参照するための設定

参照する側は `${{ steps.ステップのid.outputs.変数名 }}` で参照できる。

```yaml
      ...
      - name: echo vars
        run: |
          echo ${{ steps.setup-vars.outputs.foo }}
          echo ${{ steps.setup-vars.outputs.bar }}
          echo ${{ steps.setup-vars.outputs.baz }}   
```



# pull request

指定のルールを踏んだ上で、mergeさせたい。

Settings > Rules > Rulesets 

Target branches に default(master) を 指定することが多い

Rules で 

- *Restrict deletions* 

- *Require a pull request before merging*

- *Block force pushes* 

    をチェックする

*Require a pull request before merging* は、

- *Required approvals = 人数* 

- *Dismiss stale pull request approvals when new commits are pushed*

- *Require review from Code Owners*

- *Require approval of the most recent reviewable push*

    をチェックする

*Code Owners* の部分は少し調整が必要そう

```
# .github/CODEOWNERS

* @user
```