LoginSignup
1
0

More than 1 year has passed since last update.

GitHub ActionsでSecretsから取得した情報をgo:embedで読み込む

Last updated at Posted at 2022-08-14

go:embedを使用したファイルの埋め込み

Go言語で外部ファイルを読み込むとき、go:embedディレクティブを使うと実行バイナリにファイルを埋め込むことができます。
変数の前に//go:embed ファイル名のように書きます。

コード

main.go
package main

import (
	_ "embed"
	"fmt"
)

//go:embed secret.pem
var secretKey []byte

func main() {
	fmt.Printf("埋め込んだファイルの中身\n%s\n", secretKey)
}
secret.pem
-----BEGIN PRIVATE KEY-----
FOOBAR0123456789foobar0123456789FOOBAR0123456789foobar0123456789
FOOBAR0123456789foobar0123456789FOOBAR0123456789foobar0123456789
-----END PRIVATE KEY-----

実行結果

$ go run main.go  
埋め込んだファイルの中身
-----BEGIN PRIVATE KEY-----
FOOBAR0123456789foobar0123456789FOOBAR0123456789foobar0123456789
FOOBAR0123456789foobar0123456789FOOBAR0123456789foobar0123456789
-----END PRIVATE KEY-----

GitHub Actionsで動かしてみる

秘密鍵のようにコミットしたくないファイルは Actions secretsに中身を設定して、そこからsecret.pemファイルを作成するようにしてみます。
Actions secretsでは改行がそのままでは使えないようなのでbase64でエンコードしてから設定しています。

$ base64 secret.pem                    
LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCkZPT0JBUjAxMjM0NTY3ODlmb29iYXIwMTIzNDU2Nzg5Rk9PQkFSMDEyMzQ1Njc4OWZvb2JhcjAxMjM0NTY3ODkKRk9PQkFSMDEyMzQ1Njc4OWZvb2JhcjAxMjM0NTY3ODlGT09CQVIwMTIzNDU2Nzg5Zm9vYmFyMDEyMzQ1Njc4OQotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==

secret.jpg

.gitignore
secret.pem
.github/workflows/embed.yml
name: Embed

on:
  push:
    branches:
      - "main"

jobs:
  test:
    name: Embed
    runs-on: ubuntu-latest

    steps:
    - name: Setup Go
      uses: actions/setup-go@v3
      with:
        go-version: '>=1.18'
    
    - name: Checkout
      uses: actions/checkout@v3
    
    - name: Create secret.pem
      env:
        SECRET_KEY: ${{ secrets.SECRET_KEY }}
      run: echo -n $SECRET_KEY  | base64 --decode > secret.pem
    
    - name: Run
      run: go run main.go

Action実行結果

actions.jpg

参考

GithubActionsでjsonファイルをSecretsから展開する(Base64)

go:embed を使った場合に GitHub Actions をどうするか

『詳解Go言語Webアプリケーション開発』

1
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
1
0