ようへいの日々精進XP

よかろうもん

2022 年 06 月 05 日 (日)

アクティビティ (今までの走行 (歩行) 距離)

https://pixe.la/v1/users/inokappa/graphs/fitbit-activity

Fitibit Charge2 のアクティビティから走行 (歩行) 距離を Fitbit Web API で取得して Pixela で草生やしている。色が濃くなれば濃くなる程強度が高い (歩行、走行距離が長い) ということで。実装の詳細はこちら

ジョギング

ランオフ。ダラダラ過ごしつつ、TV を見ながら補強をやったり、ストレッチをやったり。

レアジョブ

明日、9:30 から予約を入れている。

夕飯

今日も居酒屋「自分勝手」 (適当に冷蔵庫のあまりものでつまみを作って、作りながら飲む) だった。引き続き、奥さんは体調を崩してしまっているので、おかゆを作って食べてもらった。

dagger

CI/CD がどこでも実行出来るという触れ込みで最近リリースされた dagger を半日くらいチュートリアルしてみた。

github.com

全てが Docker コンテナ上で実行することで、そのポータビリティ性が非常に魅力的で、各種 CI/CD ベンダーの環境以外にもローカル環境でも実行出来るというのは嬉しいと思う。

しかし、自分が dagger を使ってやりたいなーと思っていた terraform の各種コマンドの実行を cue を使って書いていて、「あれ、これは make コマンドでもよくね?」という気持ちが芽生えてきた。

もう少し、make コマンドと比較しての優位性等について探す旅を続けたいと思う。

ちなみに、以下は terraform の各種コマンドの実行を落とし込んだ dagger で実行可能なコード。

package main

import (
    "dagger.io/dagger"
    "dagger.io/dagger/core"
    "universe.dagger.io/alpine"
    "universe.dagger.io/bash"
    "universe.dagger.io/docker"
)

dagger.#Plan & {
    actions: {
        source: core.#Source & {
            path: "."
            exclude: [
                "*.cue",
                "*.md",
                ".git",
            ]
        }
        
        deps: docker.#Build & {
            steps: [
                alpine.#Build & {
                    packages: {
                        bash: {}
                        git: {}
                        curl: {}
                    }
                },
                docker.#Copy & {
                    contents: client.filesystem.".".read.contents
                    dest:     "/work"
                },
                bash.#Run & {
                    workdir: "/work"
                    script: {
                        contents: #"""
                        git clone https://github.com/tfutils/tfenv.git ~/.tfenv
                        ln -s ~/.tfenv/bin/* /usr/local/bin
                        tfenv install
                        """#
                    }
                },
            ]
        }
    
        validate: bash.#Run & {
            input:   deps.output
            workdir: "/work"
            script: {
                contents: #"""
                terraform validate
                """#
            }
        }
  
        plan: bash.#Run & {
            input:   deps.output
            workdir: "/work"
            script: {
                contents: #"""
                terraform plan
                """#
            }
        }

        apply: bash.#Run & {
            input:   deps.output
            workdir: "/work"
            script: {
                contents: #"""
                terraform apply -auto-approve
                """#
            }
        }
    }

    client: {
        filesystem: ".": {
            read: {
                contents: dagger.#FS
            }
        }
        env: {
            TEST_VALUE: string | *"barbarbar"
        }
    }
}