diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml new file mode 100644 index 00000000..6071fbf1 --- /dev/null +++ b/.github/workflows/cd.yml @@ -0,0 +1,67 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created +# For more information see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle + +name: Gradle Package + +on: + pull_request: + types: [ closed ] + branches: [ 'main' ] + +jobs: + build: + runs-on: self-hosted + permissions: + contents: read + packages: write + actions: write + + steps: + - uses: actions/checkout@v4 + - name: Early exit + if: ${{ !contains(github.event.pull_request.labels.*.name, '백엔드') }} + run: | + gh run cancel ${{ github.run_id }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/setup-java@v4 + with: + distribution: 'corretto' + java-version: '21' + server-id: github # Value of the distributionManagement/repository/id field of the pom.xml + settings-path: ${{ github.workspace }} # location for the settings.xml file + + - name: Setup Gradle + run: chmod +x ./backend/gradlew + + - name: Build with Gradle + continue-on-error: true + id: gradle_build + run: | + cd backend + ./gradlew build + + - name: slack mention + uses: slackapi/slack-github-action@v1.24.0 + with: + channel-id: ${{ secrets.ISSUE_CHANNEL }} + payload: | + { + "text": "pr 머지", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "<@channel> pr이 main에 머지되었습니다. \n • PR 링크: <${{ github.event.pull_request.html_url }}|${{ github.event.pull_request.title }}>" + } + } + ] + } + env: + SLACK_BOT_TOKEN: ${{ secrets.BOT_TOKEN }} + diff --git a/.github/workflows/front_ci.yml b/.github/workflows/front_ci.yml new file mode 100644 index 00000000..4a846e40 --- /dev/null +++ b/.github/workflows/front_ci.yml @@ -0,0 +1,91 @@ +name: CI + +on: + pull_request: + types: [ opened, reopened, synchronize ] + branches: [ 'main' ] + +jobs: + build-and-test: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + actions: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Early exit + if: ${{ contains(github.event.pull_request.labels.*.name, '백엔드') }} + run: | + gh run cancel ${{ github.run_id }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.15.1' + + - name: Install dependencies + run: | + cd frontend + npm install + + - name: Run lint + continue-on-error: true + id: npm_run_lint + run: | + cd frontend + npm run lint + + - name: Run build + continue-on-error: true + id: npm_run_build + run: | + pwd + cd frontend + npm run build + + - name: Run test + continue-on-error: true + id: npm_run_test + run: | + cd frontend + npm run test + + - name: Get teamMember List + id: teamMembers + uses: actions/github-script@v6 + with: + script: | + const fs = require('fs'); + const workers = JSON.parse(fs.readFileSync('.github/workflows/teamMember.json')); + const mention = context.payload.pull_request.assignees.map((user) => { + const login = user.login; + const mappedValue = workers[login]; + return mappedValue ? `<@${mappedValue}>` : `No mapping found for ${login}`; + }) + return mention.join(', '); + + - name: slack mention + uses: slackapi/slack-github-action@v1.24.0 + with: + channel-id: ${{ secrets.ISSUE_CHANNEL }} + payload: | + { + "text": "pr 테스트 결과", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "pr 테스트 \n lint : ${{ steps.npm_run_lint.outcome}} \n build : ${{ steps.npm_run_build.outcome}} \n test : ${{ steps.npm_run_test.outcome}} \n • 링크: <${{ github.event.pull_request.html_url }}|${{ github.event.pull_request.title }}> \n • pr 담당자: \${{ steps.teamMembers.outputs.result }} + } + } + ] + } + env: + SLACK_BOT_TOKEN: ${{ secrets.BOT_TOKEN }}