Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions .github/workflows/pages-web.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: Deploy Web (GitHub Pages)

on:
push:
branches:
- main
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: github-pages
cancel-in-progress: true

jobs:
build:
name: Build web artifact
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"

- name: Set up Node.js 20
uses: actions/setup-node@v4
with:
node-version: "20"

- name: Set up Android SDK
uses: android-actions/setup-android@v3

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4

- name: Build web distribution (JS + Wasm fallback)
run: ./gradlew --no-daemon --stacktrace :composeApp:composeCompatibilityBrowserDistribution

- name: Prepare Pages artifact
run: |
set -euo pipefail
mkdir -p site
cp -R composeApp/build/dist/composeWebCompatibility/productionExecutable/. site/
touch site/.nojekyll

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: site

deploy:
name: Deploy to GitHub Pages
runs-on: ubuntu-latest
needs: build
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
permissions:
pages: write
id-token: write

steps:
- name: Deploy
id: deployment
uses: actions/deploy-pages@v4
71 changes: 71 additions & 0 deletions .github/workflows/pr-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: PR Library CI

on:
pull_request:
branches:
- main
types:
- opened
- synchronize
- reopened
- ready_for_review

permissions:
contents: read

concurrency:
group: ci-pr-${{ github.event.pull_request.number }}
cancel-in-progress: true

jobs:
library-ci:
name: library-ci
runs-on: ubuntu-latest

steps:
# 전체 히스토리까지 checkout
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

# gradle 빌드에 사용할 JDK 버전 고정
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"

# JS/Wasm를 위한 Node 런타임 준비
- name: Set up Node.js 20
uses: actions/setup-node@v4
with:
node-version: "20"

# Android SDK 설치
- name: Set up Android SDK
uses: android-actions/setup-android@v3

# Gradle 캐시
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4

# 테스트, 컴파일 검증
- name: Run library verification
run: |
./gradlew --no-daemon --stacktrace \
:graph-visualizer:testDebugUnitTest \
:graph-visualizer:compileKotlinMetadata \
:graph-visualizer:compileKotlinJs \
:graph-visualizer:compileKotlinWasmJs

# 실패 시 테스트리포트 업로드
- name: Upload test reports on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: graph-visualizer-test-reports
if-no-files-found: ignore
path: |
graph-visualizer/build/reports/tests/**
graph-visualizer/build/test-results/**
109 changes: 109 additions & 0 deletions .github/workflows/release-cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
name: Release Please + CD

on:
push:
branches:
- main
workflow_dispatch:

permissions:
contents: write
issues: write
pull-requests: write

concurrency:
group: release-please-main
cancel-in-progress: false

jobs:
# release-please -> main push 시 변경분을 반영해 release PR을 생성/업데이트하고, 릴리즈 커밋이면 태그/릴리즈를 생성
release-please:
name: release-please
runs-on: ubuntu-latest
outputs:
release_created: ${{ steps.release.outputs.release_created }}
tag_name: ${{ steps.release.outputs.tag_name }}
version: ${{ steps.release.outputs.version }}

steps:
- name: Run release-please
id: release
uses: googleapis/release-please-action@v4
with:
release-type: simple
target-branch: main
include-v-in-tag: true
token: ${{ github.token }}

release-cd:
name: release-cd
runs-on: ubuntu-latest
needs: release-please
if: ${{ needs.release-please.outputs.release_created == 'true' }}

steps:
# 이번 릴리즈 태그 기준으로 코드를 checkout해서 정확히 아티팩트 생성
- name: Checkout release tag
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ needs.release-please.outputs.tag_name }}

# JDK 버전 고정
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"

# JS/Wasm를 위한 Node 런타임 준비
- name: Set up Node.js 20
uses: actions/setup-node@v4
with:
node-version: "20"

# Android SDK 설치
- name: Set up Android SDK
uses: android-actions/setup-android@v3

# Gradle 캐시
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4

# 테스트, 컴파일 검증 및 aar 생성
- name: Verify and build release AAR
run: |
./gradlew --no-daemon --stacktrace \
:graph-visualizer:testDebugUnitTest \
:graph-visualizer:compileKotlinMetadata \
:graph-visualizer:compileKotlinJs \
:graph-visualizer:compileKotlinWasmJs \
:graph-visualizer:assembleRelease

# 생성된 release AAR를 릴리즈 업로드용 이름으로 정리
- name: Prepare release asset
env:
VERSION: ${{ needs.release-please.outputs.version }}
run: |
set -euo pipefail

input_aar="graph-visualizer/build/outputs/aar/graph-visualizer-release.aar"
if [ ! -f "${input_aar}" ]; then
echo "Missing release AAR: ${input_aar}" >&2
exit 1
fi

mkdir -p dist
output_aar="dist/graph-visualizer-${VERSION}.aar"
cp "${input_aar}" "${output_aar}"

# 생성된 GitHub Release에 AAR 파일 첨부
- name: Upload assets to GitHub Release
env:
GITHUB_TOKEN: ${{ github.token }}
TAG: ${{ needs.release-please.outputs.tag_name }}
VERSION: ${{ needs.release-please.outputs.version }}
run: |
gh release upload "${TAG}" \
"dist/graph-visualizer-${VERSION}.aar" \
--clobber
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ captures
!*.xcworkspace/contents.xcworkspacedata
**/xcshareddata/WorkspaceSettings.xcsettings
node_modules/
kotlin-js-store/


# Created by https://www.toptal.com/developers/gitignore/api/kotlin,android,androidstudio
Expand Down Expand Up @@ -205,4 +206,4 @@ fabric.properties

!/gradle/wrapper/gradle-wrapper.jar

# End of https://www.toptal.com/developers/gitignore/api/kotlin,android,androidstudio
# End of https://www.toptal.com/developers/gitignore/api/kotlin,android,androidstudio
Loading