0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Renovate] 組み込み Manager のキャプチャルール

Last updated at Posted at 2025-01-19

組み込み manager のキャプチャルールを確認する

manager custom.regex を有効化すると、Renovate に処理をさせる上で必要なパッケージ依存関係の情報(packageFileName: パッケージファイルのパス、packageName: パッケージ名、currentVersion: 現在のバージョン、 datasource, depName etc.)の独自のキャプチャルールを設定できる。

しかし、Renovate 組み込みの manager については、その具体的な設定がリファレンスに記述されていない。
組み込みの manager のキャプチャルールを知るためには、実装コードを読むしかない(と思われる)。

各 manager 固有の実装コードは、
GitHub のリポジトリ renovatebot/renovate

lib/modules/manager/<manager 名>/ 以下に配置するルールになっているようである。

manager terraform のキャプチャルール

manager terraform については、リファレンス に記述がある。

  • terraform ブロックの required_version
  • terraform ブロックの required_providers

…その他もろもろが対象になる雰囲気はある。
しかし、具体的なキャプチャルールを知ることはできない。

そこで、ソースコードを確認すると、例えばteraform.required_version のキャプチャルールは、以下の仕様になっているようだ。

  • currentValue: .tf 内の terraform ブロックの required_version の値
  • depType: 'required_version'
  • datasource: 'github-releases'
  • depName: 'hashicorp/terraform'
  • extractVersion: 'v(?.*)'
  • versioning: 'hashicorp'

確認の起点としたソースコードは、renovate/lib/modules/manager/terraform/extractors/terraform-block/terraform-version.ts

(コメントつけてみた)

terraform-version.ts
export class TerraformVersionExtractor extends DependencyExtractor {
  getCheckList(): string[] {
    return ['required_version'];
  }

  // ranovate/lib/modules/manager/terraform/hcl/types.ts より
  //
  // export interface TerraformDefinitionFile {
  //   terraform?: TerraformBlock[];
  //   module?: Record<string, TerraformModule[]>;
  //   resource?: TerraformResources;
  //   provider?: Record<string, TerraformProvider[]>;
  // }
  //
  // export interface TerraformBlock {
  //   required_providers?: TerraformRequiredProviderBlock[];
  //   required_version?: string;
  // }
  //
  // export interface TerraformRequiredProviderBlock {
  //   [s: string]: TerraformRequiredProvider | string;
  // }
  //
  // export interface TerraformRequiredProvider {
  //   source?: string;
  //   version?: string;
  // }
  extract(hclRoot: TerraformDefinitionFile): PackageDependency[] {
    // 各 .tf 内の terraform.required_version と terraform.required_providers.xxx.source, 
    // terraform.required_providers.xxx.version がわたされる
    const terraformBlocks = hclRoot?.terraform;
    if (is.nullOrUndefined(terraformBlocks)) {
      return [];
    }

    const dependencies = [];
    for (const terraformBlock of terraformBlocks) {
      const requiredVersion = terraformBlock.required_version;
      if (is.nullOrUndefined(requiredVersion)) {
        continue;
      }

      // - currentValue: .tf 内の terraform ブロックの required_version の値
      // - depType: 'required_version'
      // - datasource: 'github-releases'
      // - depName: 'hashicorp/terraform'
      // - extractVersion: 'v(?<version>.*)'
      // - versioning: 'hashicorp'
      dependencies.push(
        this.analyseTerraformVersion({
          currentValue: requiredVersion,
        }),
      );
    }
    return dependencies;
  }

  ...

  // - depType: 'required_version'
  // - datasource: 'github-releases'
  // - depName: 'hashicorp/terraform'
  // - extractVersion: 'v(?<version>.*)'
  // - versioning: 'hashicorp'
  protected analyseTerraformVersion(dep: PackageDependency): PackageDependency {
    dep.depType = 'required_version';
    dep.datasource = GithubReleasesDatasource.id;
    dep.depName = 'hashicorp/terraform';
    dep.extractVersion = 'v(?<version>.*)$';
    dep.versioning = hashicorp.id;
    return dep;
  }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?