Circle CI の terraform Orb で
terraform の version を指定するには次のようにしますが、この terraform_version
の値に変数を
使うことが出来ず、tf ファイルや .tool-versions
から読み出した値を使うことが出来ませんでした。
- terraform/install:
terraform_version: 1.7.2
GitHub Actions では他の step の output などを使うことができるので hashicorp/setup-terraform では .tool-versions
から取り出した値を渡すことにしました。
- name: Get terraform version from .tool-versions
id: tfversion
run: echo tfversion=$(grep '^terraform ' .tool-versions | awk '{print $2}') >> $GITHUB_OUTPUT
# https://github.com/hashicorp/setup-terraform
- name: Download Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: ${{ steps.tfversion.outputs.tfversion }}
tf ファイル内の required_version
や .tool-versions
は renovate がサポートしているので更新の Pull Request を作ってくれます。
Circle CI も renovate がサポートしてくれれば良いのですが、renovate.json をカスタマイズすることで .circleci/config.yml
内の上記の terraform_version
を更新できるようにしてみた。
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"assignees": ["yteraoka"],
"extends": [
"config:base"
],
"packageRules": [
{
"matchManagers": ["terraform"],
"matchDepTypes": ["required_version"],
"groupName": "Terraform",
"addLabels": ["terraform-version"]
},
{
"matchManagers": ["asdf"],
"matchPackageNames": ["hashicorp/terraform"],
"groupName": "Terraform",
"addLabels": ["terraform-version"]
},
{
"matchManagers": ["regex"],
"matchDepPatterns": ["terraform"],
"groupName": "Terraform",
"addLabels": ["terraform-version"]
}
],
"customManagers": [
{
"customType": "regex",
"fileMatch": ["\\.circleci/config\\.ya?ml"],
"matchStrings": [
"terraform_version: *(?<currentValue>\\d+\\.\\d+\\.\\d+)"
],
"datasourceTemplate": "github-releases",
"depNameTemplate": "hashicorp/terraform",
"extractVersionTemplate": "^v(?<version>.*)$"
}
]
}
renovate の設定ファイルはとっつきづら過ぎて全然理解できてないけど一応更新された。
Renovate config の変更が想定通りか確認する 〜真の dry-run を求めて〜 で紹介されている dry-run 方法を見てエラーになってる箇所を見つけることが出来ました。
#!/bin/bash
export LOG_LEVEL=debug
owner=$(basename $(dirname $(pwd)))
repo=$(basename $(pwd))
renovate \
--token $(gh auth token) \
--dry-run \
--schedule= \
--require-config=renovate.json \
${owner}/${repo}
もしかすると issue に作られている dashboard でも確認できたのだろうか?