chore: 모듈 정의 #38
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: PR Test & Analysis | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - dev | |
| pull_request: | |
| types: [ opened, reopened, synchronize ] | |
| branches: | |
| - main | |
| - dev | |
| concurrency: | |
| group: ci-pr-${{ github.head_ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| fetch-and-diff: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| modified_modules: ${{ steps.determine_modules.outputs.modules }} | |
| steps: | |
| - name: Git Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Set Modules | |
| run: | | |
| echo "MODULES=demo demo1" >> $GITHUB_ENV | |
| - name: Fetch Base Branch | |
| run: git fetch origin +refs/heads/${{ github.ref_name }}:refs/remotes/origin/${{ github.ref_name }} | |
| - name: Get Modified Files | |
| run: | | |
| MODIFIED_FILES=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | tr '\n' ' ') | |
| echo $MODIFIED_FILES | |
| echo "MODIFIED_FILES=$MODIFIED_FILES" >> $GITHUB_ENV | |
| - name: Determine Modified Modules | |
| id: determine_modules | |
| run: | | |
| IFS=' ' read -r -a MODIFIED_FILES_ARRAY <<< "${{ env.MODIFIED_FILES }}" | |
| MODIFIED_MODULES=() | |
| for FILE in "${MODIFIED_FILES_ARRAY[@]}"; do | |
| # 모듈 경로 변경 여부 체크 | |
| if [[ "$FILE" == "$MODULE"* ]]; then | |
| if ! [[ " ${MODIFIED_MODULES[@]} " =~ " ${MODULE} " ]]; then | |
| echo "Add Module($MODULE)" | |
| MODIFIED_MODULES+=("$MODULE") | |
| break | |
| fi | |
| fi | |
| done | |
| echo "MODULE_MATRIX : ${MODULE_MATRIX}" | |
| # 변경 모듈 MATRIX 문자열 변환 | |
| MODULE_MATRIX="" | |
| for MODULE in "${MODIFIED_MODULES[@]}"; do | |
| echo ${MODULE} | |
| if [ -n "$MODULE_MATRIX" ]; then | |
| MODULE_MATRIX+=",\"${MODULE}\"" | |
| else | |
| MODULE_MATRIX+="\"${MODULE}\"" | |
| fi | |
| done | |
| echo "MODULE_MATRIX : ${MODULE_MATRIX}" | |
| MODULE_MATRIX="[$MODULE_MATRIX]" | |
| echo "MODIFIED_MODULE_MATRIX=$MODULE_MATRIX" | |
| echo "modules=$(echo $MODULE_MATRIX)" >> $GITHUB_OUTPUT | |
| echo "MODULE_MATRIX : ${MODULE_MATRIX}" | |
| if [ ${#MODIFIED_MODULES[@]} -eq 0 ]; then | |
| echo "fin" | |
| exit 0 | |
| fi | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ vars.DOCKERHUB_ID }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Build | |
| run: | | |
| echo "${{ steps.determine_modules.outputs.modules }}" | |
| IFS=' ' read -r -a MODIFIED_MODULES <<< "${{ steps.determine_modules.outputs.modules }}" | |
| for MODULE in "${MODIFIED_MODULES[@]}"; do | |
| docker build -f ${MODULE}/Dockerfile -t jerryworld/${MODULE}:${{ github.sha }} . | |
| docker push jerryworld/${MODULE}:${{ github.sha }} | |
| done | |
| push-manifest: | |
| name: Push Manifest | |
| needs: fetch-and-diff | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: jerry-world/k8s-manifest-test | |
| ref: refs/heads/main | |
| token: ${{secrets.GIT_TOKEN}} | |
| - name: Update Patch | |
| run: | | |
| echo "${{ steps.determine_modules.outputs.modules }}" | |
| IFS=' ' read -r -a MODIFIED_MODULES <<< "${{ steps.determine_modules.outputs.modules }}" | |
| for MODULE in "${MODIFIED_MODULES[@]}"; do | |
| cd apps/${MODULE}/overlay/${{ github.ref_name }} | |
| after_sha="${{ github.sha }}" | |
| echo "${after_sha:0:8}" | |
| sed -i 's|\(image:[[:space:]]*[^:]*:[^[:space:]]*\)\(........\)$|\1'${after_sha:0:8}'|g' deployment-patch.yaml | |
| git add -A | |
| git commit -m "update manifest demo-dev" | |
| done | |
| git config --global user.email "[email protected]" | |
| git config --global user.name "jerry-world" | |
| git push |