# GitHub







```kt collapse
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "Tools".group {
        github()
    }
}

// roles/GitHub.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.github() =
    "GitHub".group {
        "Actions".group {
            "Workflow" {
                summary = "GitHub Actions のワークフロー"
                layout {
                    ".github/workflows/*.yml".file()
                    ".github/workflows/*.yaml".file()
                }
            }

            "CompositeAction" {
                summary = "リポジトリ内で定義する composite action"
                layout {
                    ".github/actions/*/action.yml".file()
                }
            }
        }

        "Templates".group {
            "Issue" {
                summary = "Issue を立てるときのテンプレート"
                layout {
                    ".github/ISSUE_TEMPLATE/*.yml".file()
                    ".github/ISSUE_TEMPLATE/*.md".file()
                }
            }

            "PullRequest" {
                summary = "Pull Request の説明のテンプレート"
                layout {
                    ".github/PULL_REQUEST_TEMPLATE.md".file().optional()
                }
            }
        }

        "CodeOwners" {
            summary = "パスごとのレビュー担当者の宣言"
            layout {
                ".github/CODEOWNERS".file().optional()
            }
        }

        "Dependabot" {
            summary = "Dependabot の更新設定"
            layout {
                ".github/dependabot.yml".file().optional()
            }
        }

        "CommunityHealth".group {
            "Contributing" {
                summary = "コントリビュートの手順"
                layout {
                    ".github/CONTRIBUTING.md".file().optional()
                }
            }

            "CodeOfConduct" {
                summary = "行動規範"
                layout {
                    ".github/CODE_OF_CONDUCT.md".file().optional()
                }
            }

            "Security" {
                summary = "脆弱性の報告方法"
                layout {
                    ".github/SECURITY.md".file().optional()
                }
            }

            "Support" {
                summary = "質問や助けを求める先"
                layout {
                    ".github/SUPPORT.md".file().optional()
                }
            }

            "Funding" {
                summary = "スポンサーシップの案内"
                layout {
                    ".github/FUNDING.yml".file().optional()
                }
            }
        }
    }
```

<SnippetIsStartingPoint />