Skip to content

[Feat/#19] 모달 컴포넌트 #53

[Feat/#19] 모달 컴포넌트

[Feat/#19] 모달 컴포넌트 #53

Workflow file for this run

name: PR CI Check
on:
pull_request:
branches: [ develop, main ]
permissions:
contents: read
issues: write
pull-requests: write
concurrency:
group: pr-ci-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
lint:
name: PR CI Check (Lint & Build)
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check for Android changes
uses: dorny/paths-filter@v3
id: changes
with:
filters: |
android:
- '**/*.kt'
- '**/*.kts'
- '**/*.xml'
- '**/*.gradle'
- '**/*.properties'
- 'gradle/**'
- 'buildSrc/**'
- name: Gradle cache
if: steps.changes.outputs.android == 'true'
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Set up JDK 17
if: steps.changes.outputs.android == 'true'
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Grant permission to gradlew
if: steps.changes.outputs.android == 'true'
run: chmod +x ./gradlew
- name: Create local.properties
if: steps.changes.outputs.android == 'true'
env:
LOCAL_PROPERTIES: ${{ secrets.LOCAL_PROPERTIES }}
run: |
if [ -n "$LOCAL_PROPERTIES" ]; then
echo "${LOCAL_PROPERTIES}" > local.properties
else
echo "poti.base.url=\"https://temp.example.com/\"" > local.properties
fi
- name: Run ktlintCheck
if: steps.changes.outputs.android == 'true'
id: ktlint
continue-on-error: true
run: ./gradlew ktlintCheck
- name: Upload ktlint report
if: steps.ktlint.outcome == 'failure'
uses: actions/upload-artifact@v4
with:
name: ktlint-report
path: '**/build/reports/ktlint/'
retention-days: 7
- name: Comment PR on ktlint failure
if: steps.ktlint.outcome == 'failure'
uses: actions/github-script@v7
with:
script: |
const marker = "<!-- CI:KTLINT -->";
const body =
`${marker}\n` +
`❌ **Ktlint check failed!**\n\n` +
`Please fix the code style issues:\n` +
"```bash\n" +
"./gradlew ktlintFormat\n" +
"```";
const { owner, repo } = context.repo;
const issue_number = context.issue.number;
const comments = await github.paginate(
github.rest.issues.listComments,
{ owner, repo, issue_number, per_page: 100 }
);
const existing = comments.find(c =>
c?.body?.includes(marker) && c?.user?.login === "github-actions[bot]"
);
if (existing) {
await github.rest.issues.deleteComment({
owner, repo,
comment_id: existing.id
});
}
await github.rest.issues.createComment({
owner, repo,
issue_number,
body
});
- name: Fail job if ktlint failed
if: steps.ktlint.outcome == 'failure'
run: exit 1
- name: Mark ktlint comment as resolved
if: steps.ktlint.outcome == 'success'
uses: actions/github-script@v7
with:
script: |
const marker = "<!-- CI:KTLINT -->";
const runUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
const body =
`${marker}\n` +
`✅ **Ktlint check passed.**\n\n` +
`Run: ${runUrl}`;
const { owner, repo } = context.repo;
const issue_number = context.issue.number;
const comments = await github.paginate(
github.rest.issues.listComments,
{ owner, repo, issue_number, per_page: 100 }
);
const existing = comments.find(c =>
c?.body?.includes(marker) && c?.user?.login === "github-actions[bot]"
);
if (existing) {
await github.rest.issues.updateComment({
owner, repo,
comment_id: existing.id,
body
});
}
- name: Build Debug APK
id: build
if: steps.changes.outputs.android == 'true' && steps.ktlint.outcome == 'success'
continue-on-error: true
run: ./gradlew :app:assembleDebug
- name: Comment PR on build failure
if: steps.build.outcome == 'failure'
uses: actions/github-script@v7
with:
script: |
const marker = "<!-- CI:BUILD -->";
const body =
`${marker}\n` +
`🔥 **Build Failed!**\n\n` +
`The project build has failed.\n` +
`Please check the error logs and try again.\n` +
"```bash\n" +
"./gradlew :app:assembleDebug\n" +
"```";
const { owner, repo } = context.repo;
const issue_number = context.issue.number;
const comments = await github.paginate(
github.rest.issues.listComments,
{ owner, repo, issue_number, per_page: 100 }
);
const existing = comments.find(c =>
c?.body?.includes(marker) && c?.user?.login === "github-actions[bot]"
);
if (existing) {
await github.rest.issues.deleteComment({
owner, repo,
comment_id: existing.id
});
}
await github.rest.issues.createComment({
owner, repo,
issue_number,
body
});
- name: Mark build comment as resolved
if: steps.build.outcome == 'success'
uses: actions/github-script@v7
with:
script: |
const marker = "<!-- CI:BUILD -->";
const runUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
const body =
`${marker}\n` +
`✅ **Build passed.**\n\n` +
`Run: ${runUrl}`;
const { owner, repo } = context.repo;
const issue_number = context.issue.number;
const comments = await github.paginate(
github.rest.issues.listComments,
{ owner, repo, issue_number, per_page: 100 }
);
const existing = comments.find(c =>
c?.body?.includes(marker) && c?.user?.login === "github-actions[bot]"
);
if (existing) {
await github.rest.issues.updateComment({
owner, repo,
comment_id: existing.id,
body
});
}
- name: Fail job if build failed
if: steps.build.outcome == 'failure'
run: exit 1