> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ale.run/llms.txt
> Use this file to discover all available pages before exploring further.

# GitHub Actions

> サービスのデプロイ時に[自動生成されるGitHub Actionsワークフロー](/ja/developers/githubactions#workflow%E5%86%85%E5%AE%B9%E7%A2%BA%E8%AA%8D)を適用して、簡単にデプロイを自動化できます。

<Frame>
  <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/developers/images/ja/githubactions.png" />
</Frame>

>

***

## シークレットの設定

> エールと**GitHub**の通信のためのシークレット設定が必要です。

<AccordionGroup>
  <Accordion title="GitHub Personal access tokenの発行">
    <Frame>
      <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/developers/images/ja/11_01.png" />
    </Frame>

    > **GitHub Settings > Developer settings > Personal access tokens(classic)** に移動し、`Generate new token(classic)`をクリックします。

    <Frame>
      <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/developers/images/ja/11_02.png" />
    </Frame>

    > 次の画面で`repo`、`admin:public_key`権限を付与してトークンを生成します。

    <Tip>
      `Expiration`設定期間が切れるとワークフローが動作しません。
    </Tip>

    <Frame>
      <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/developers/images/ja/11_03.png" />
    </Frame>

    > 生成されたトークン値を保管します。
  </Accordion>

  <Accordion title="エール API Keyの発行">
    <Frame>
      <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/developers/images/ja/11_04.png" />
    </Frame>

    > スペース設定の**認証**ページで`新しいAPI キーを生成`でキーを生成し、保管します。
  </Accordion>

  <Accordion title="上記のシークレットをGitHubリポジトリのActions Secretとして設定">
    <Frame>
      <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/developers/images/ja/11_05.png" />
    </Frame>

    > GitHubリポジトリの **Settings / Secrets and variables / Actions** で `New repository secret`をクリックします。

    <Frame>
      <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/developers/images/ja/11_06.png" />
    </Frame>

    > **Name値に注意**しながら2つのRepository secretを作成します。

    | Name       | Secret                                |
    | ---------- | ------------------------------------- |
    | ALE\_TOKEN |          エール API key                  |
    | GHP\_TOKEN |          GitHub Personal Access Token |
  </Accordion>
</AccordionGroup>

## GitHub Actionsの適用

### Workflow内容確認

<Frame>
  <img className="block rounded-md" src="https://files.cloudtype.io/ale-docs/developers/images/ja/11_07.png" />
</Frame>

> Github Actionsを適用したいサービスページの**CLI**タブでGithub Actionsセクションのコードをコピーします。

### Workflow作成

> プロジェクトのルートディレクトリに`.github/workflows`ディレクトリを作成し、エールからコピーしたコードを内容とするyamlファイルを作成します。

<Info>
  `.github/workflows`は規定のパスのため変更できませんが、ファイル名は自由に設定できます。
</Info>

## アクション別の入力値

> GitHub ActionsはエールがリポジトリをプルできるようにするGitHubリポジトリのDeploy Keyを設定する**connect**アクションと、デプロイ設定をエールに送信してデプロイを要求する**deploy**アクションで動作します。

<AccordionGroup>
  <Accordion title="connectアクションの入力値">
    | 入力値                  |                                 | 必須 / デフォルト値                            |
    | -------------------- | ------------------------------- | -------------------------------------- |
    | **token**            | クラウドタイプAPI Key                  | 必須                                     |
    | **ghtoken**          | GitHub Personal Token           | 必須                                     |
    | **endpoint**         | エールAPI Endpoint                 | 必須 (https\://<hi>app.\[ドメイン]/api</hi>) |
    | **scope**            | 接続するスペース名                       | デフォルト：API Key使用者スペース名                  |
    | **repo**             | GitHubリポジトリ(形式 user/repo)       | デフォルト：現在Action実行リポジトリ                  |
    | **readOnly**         | ‘true’設定で読み取り専用デプロイキー生成         | デフォルト：false                            |
  </Accordion>

  <Accordion title="deployアクションの入力値">
    | 入力値           |                           | 必須 / デフォルト値                            |
    | ------------- | ------------------------- | -------------------------------------- |
    | **token**     | クラウドタイプAPI Key            | 必須                                     |
    | **endpoint**  | エールAPI Endpoint           | 必須 (https\://<hi>app.\[ドメイン]/api</hi>) |
    | **project**   | デプロイするプロジェクト名             | 必須 (スペース/プロジェクト)                       |
    | **stage**     | デプロイする環境名                 | デフォルト：プロジェクト内デフォルト環境                   |
    | **allStages** | 'true'に設定するとすべての環境にデプロイ   | デフォルト：false                            |
    | **repo**      | GitHubリポジトリ(形式 user/repo) | 現在のアクションが実行中のリポジトリ                     |
    | **file**      | デプロイ設定ファイルのリポジトリ位置        | デフォルト：.ale/app.yaml                    |
    | **json**      | デプロイ設定JSONテキスト            | -                                      |
    | **yaml**      | デプロイ設定yamlテキスト            | -                                      |

    <Warning>
      **file、json、yaml**入力値のうち1つの設定は必須です。
    </Warning>
  </Accordion>
</AccordionGroup>

## 活用

> 自動生成されたworkflowファイルをサービス設定に合わせて修正して活用できます。

<AccordionGroup>
  <Accordion title="サブディレクトリの設定">
    > **path**にデプロイするディレクトリを設定できます。

    ```bash theme={null}
    context:
    git:
    ...
    path: /pathname    
    ```
  </Accordion>

  <Accordion title="リソースの変更">
    > yamlファイルにリソースに関する内容がない場合、[ダッシュボードで設定したリソース](/ja/developers/resource#2)を反映します。yamlファイルでリソースを管理したい場合、**resources**に`spot`、`cpu`、`memory`、`disk`、`replicas`を設定して適用できます。

    ```bash theme={null}
    ...
    yaml: |
      name: springboot-crud-example
      app: java@17
      resources:
        spot: false
        cpu: 1
        memory: 1.5
        replicas: 2
    ...
    ```
  </Accordion>

  <Accordion title="環境変数の設定">
    > [ダッシュボードで環境変数を設定してデプロイ](/ja/developers/env)した場合、CLIタブのworkflowファイル内容に自動的に反映されます。yamlファイルに手動で適用したい場合、**options.env**にnameとvalueを配列形式で設定して適用できます。

    ```bash theme={null}
    ...
    yaml: |
      name: springboot-crud-example
      app: java@17
      options:
        ports: 8080
        env:
          - name: JAVA_OPTS
            value: -Xms256m -Xmx512m
          - name: SPRING_PROFILES_ACTIVE
            value: dev
    ...
    ```

    <Tip>
      プロジェクトにシークレットを登録している場合、value値をシークレット名で参照できます。
    </Tip>
  </Accordion>

  <Accordion title="サービス対象ポート">
    > **options.ports**でカンマ(,)でポートを区切って最大3つのポートまで設定可能です。

    ```bash theme={null}
    ...
    yaml: |
      name: springboot-crud-example
      app: java@17
      options:
        ports: 8080, 8081, 8082
    ...
    ```
  </Accordion>
</AccordionGroup>
