# Blossomops 개요
> Prod Approve을 하기 위해 슬랙 메시지 전송이 필요하며 모듈화에 대한 사용 방법이다.
* FE, BE 사용방법이 구분되어 있으며 아래 예시를 참고하여 각 레포에서 Step을 추가하면 된다.

# Blossomops 사용방법
* Parameters
  + TYPE: 기본값이 BE이며, FE 레포에서 사용할때만 FE를 추가한다.
  + ENVIROMENT: prod 필수 고정 값이며, 기본값으로 prod로 잡혀있다.
  + VERSION: 버전 정보를 표기하기 위함이다.
   * CI 조건을 PR 로 변경한 다음에 head_ref를 사용하면 된다.
  + CHANNEL_ID: 기본값으로는 #prod_approve 채널 ID가 들어가있으며, 테스트 시에만 "C05JC0T17U3" 을 추가한다.
  + SERVICE
   * FE에서는 REPOSITORY 명칭을 사용하며, 이를 위해 set-outputs step에서 뽑아내도록 한다.
   * BE에서는 Argocd Application 이름을 기재한다.
  + CATEGORY: Approve를 하는 분류 기준이 된다.
   * FE는 각 레포의 분류 기준에 따라서 kas, klip, klipdrops, klippass, baas, devops 중에서 값을 추가한다.
   * BE는 git diff에서 파일 변경분의 charts/apps/ 값을 사용하도록 한다.
  + REPOSITORY: FE일떄만 사용하며, REPO의 Pending Deployment를 찾기 위해 사용한다.
  + ENVIRONMENT_ID: 각 REPOSITORY별로 Approve의 ID를 추가한다.
    * 이떄 반드시 gx-bot이 해당 REPOSITORY의 오너로 추가되어야 한다.
  + WORKFLOW_ID, SLACK_APPROVE_TOKEN: 변경할 필요 없다.

> FE 레포에서 사용하는 경우
* FE의 경우에는 Pending Deployment에 대한 Approve가 필요하므로 CI에서 반드시 아래 권한을 추가해야한다.
```yaml
  permissions:
    id-token: write
    contents: write
    pull-requests: write
    checks: write
    actions: write
    deployments: write
```

```yaml
...
  blossomops-check:
    runs-on: ubuntu-22.04
    needs: [deploy-staging]
    steps:
      - name: fetch actions repo
        uses: actions/checkout@v4
        with:
          repository: "ground-x/gx-gh-actions"
          path: ./actions
          ssh-key: "${{ secrets.GX_PRIVATE_SSH_KEY }}"
          ref: "v2.1.0"
      - name: set outputs
        id: set-outputs
        run: |
          GIT_REPO=${{ github.repository }}
          SERVICE=$(echo $GIT_REPO | awk -F "/" '{print $2}')
          echo "SERVICE=$(echo $SERVICE)" >> $GITHUB_OUTPUT
      - name: blossomops FE check
        uses: ./actions/devops/blossom_deploy
        with:
          TYPE: "FE"
          ENVIROMENT: "prod"
          CATEGORY: "devops"
          VERSION: "v1.0.0"
          CHANNEL_ID: "C05JC0T17U3"
          SERVICE: ${{ steps.set-outputs.outputs.SERVICE }}
          REPOSITORY: ${{ github.repository }}
          ENVIRONMENT_ID: "2476771098"
          WORKFLOW_ID: ${{ github.run_id }}
          SLACK_APPROVE_TOKEN: ${{ secrets.SLACK_APPROVE_TOKEN }}
```

> BE 레포에서 사용하는 경우(BE의 경우 helm-charts 레포에서만 설정 하면 됨)
```yaml
...
  - name: blossomops check
    uses: ./actions/devops/blossom_deploy
    with:
      TYPE: "BE"
      ENVIROMENT: "dev"
      CATEGORY: "devops"
      VERSION: "v1.0.0"
      CHANNEL_ID: "C05JC0T17U3"
      REPOSITORY: ${{ github.repository }}
      PR_NUMBER: ${{ github.event.pull_request.number }}
      SERVICE: "blossomops"
      SLACK_APPROVE_TOKEN: ${{ secrets.SLACK_APPROVE_TOKEN }}
```