はじめに
本記事は GitHub Actions Advent Calendar 2025 の1日目の記事です。
先日 swiftlang/github-workflows の 0.0.1 がリリースされました。
GitHub Actionsのワークフローが重複するのを防ぐため、再利用できるワークフローを提供するリポジトリです。
iOSアプリ開発にも使えそうで、本記事ではSoundness(健全性)に絞って紹介します。
環境
- swiftlang/github-workflows: 0.0.1
Soundness(健全性)
リポジトリがベストプラクティスに準拠しているか確認するためのワークフローです。
多様なチェック機能があるので、ひとつずつ紹介します。
各チェックはデフォルトですべて有効です。
全体の入力
複数のジョブで使われる入力です。
| 入力 | 型 | 説明 | デフォルト |
|---|---|---|---|
linux_pre_build_command |
string |
Swiftパッケージのビルド前に実行されるコマンド | "" |
API breakage check
APIの互換性を確認します。
実体は swift package diagnose-api-breaking-changes の実行です。
| 入力 | 型 | 説明 | デフォルト |
|---|---|---|---|
api_breakage_check_enabled |
boolean |
対象ジョブを有効にするか | true |
api_breakage_check_allowlist_path |
string |
--breakage-allowlist-path へ渡される文字列 |
"" |
api_breakage_check_baseline |
string |
基準として使用されるタグ。デフォルトはPRベース | "" |
api_breakage_check_container_image |
string |
使用されるコンテナイメージ。デフォルトは最新のSwift Ubuntuイメージ | "swift:6.2-noble" |
Documentation check
ドキュメントを確認します。
実体は swift package plugin generate-documentation の実行です。
| 入力 | 型 | 説明 | デフォルト |
|---|---|---|---|
docs_check_enabled |
boolean |
対象ジョブを有効にするか | true |
docs_check_container_image |
string |
使用されるコンテナイメージ。デフォルトは最新のSwift Ubuntuイメージ | swift:6.2-noble |
docs_check_additional_arguments |
string |
doccに渡す追加の引数 | "" |
Unacceptable language check
使用不可の単語が含まれていないか確認します。
| 入力 | 型 | 説明 | デフォルト |
|---|---|---|---|
unacceptable_language_check_enabled |
boolean |
対象ジョブを有効にするか | true |
unacceptable_language_check_word_list |
string |
使用不可ワード一覧。デフォルトは適切な単語リスト | "blacklist whitelist slave master sane sanity insane insanity kill killed killing hang hung hanged hanging" |
License headers check
ライセンスヘッダーを確認します。
| 入力 | 型 | 説明 | デフォルト |
|---|---|---|---|
license_header_check_enabled |
boolean |
対象ジョブを有効にするか | true |
license_header_check_project_name |
string |
ライセンスヘッダーに記載されるプロジェクト名。 license_header_check_enabled が false または .license_header_template ファイルが存在する場合を除き必須 |
"" |
Broken symlinks check
壊れているsymlinkがないか確認します。
| 入力 | 型 | 説明 | デフォルト |
|---|---|---|---|
broken_symlink_check_enabled |
boolean |
対象ジョブを有効にするか | true |
Format check
フォーマットを確認します。
実体は swift-format format と swift-format lint の実行です。
| 入力 | 型 | 説明 | デフォルト |
|---|---|---|---|
format_check_enabled |
boolean |
対象ジョブを有効にするか | true |
format_check_container_image |
string |
使用されるコンテナイメージ。デフォルトは最新のSwift Ubuntuイメージ | swift:6.2-noble |
Shell check
シェルを確認します。
実体は shellcheck の実行です。
| 入力 | 型 | 説明 | デフォルト |
|---|---|---|---|
shell_check_enabled |
boolean |
対象ジョブを有効にするか | true |
shell_check_container_image |
string |
使用されるコンテナイメージ。デフォルトは最新のSwift Ubuntuイメージ | swift:6.2-noble |
YAML lint check
YAMLファイルを確認します。
実体は yamllint の実行です。
| 入力 | 型 | 説明 | デフォルト |
|---|---|---|---|
yamllint_check_enabled |
boolean |
対象ジョブを有効にするか | true |
Python lint check
Pythonファイルを確認します。
実体は flake8 の実行です。
| 入力 | 型 | 説明 | デフォルト |
|---|---|---|---|
python_lint_check_enabled |
boolean |
対象ジョブを有効にするか | true |
設定ファイル例
最後に私が個人アプリで実際に使っているYAMLファイルから、Soundnessの部分を抜粋して紹介します。
name: CI
on:
push:
branches:
- main
paths-ignore:
- Docs/**
- README.md
- LICENSE
pull_request:
types: [opened, reopened, synchronize]
paths-ignore:
- Docs/**
- README.md
- LICENSE
workflow_dispatch:
permissions:
contents: read
jobs:
soundness:
name: Soundness
uses: swiftlang/github-workflows/.github/workflows/soundness.yml@0.0.1
with:
api_breakage_check_enabled: false
docs_check_enabled: false
license_header_check_enabled: false
format_check_enabled: false
実際のファイルは以下です。
Soundness以外にビルドを実行するジョブがあります。
おわりに
swiftlang/github-workflows のSoundnessはiOSアプリ開発にも有用なことがわかりました。
まだ 0.0.1 なのでこれから破壊的変更があるかもしれませんが、ぜひ使ってみてください。
以上 GitHub Actions Advent Calendar 2025 の1日目の記事でした。
明日は @kamajiro さんで 組込み開発でもCI導入!GitHub+AVHで体験するCortex-Mのビルド・テスト自動化 です。