🚀 Githubアクションを迅速かつ簡単にできるだけ早くプロジェクトを開く


導入


こんにちは、devの世界!😉 優れたCI/CDツールを使用してルーチンを自動化する記事の連続シリーズ- githubアクション.
これは、外出先で書かれたアプリケーションのリリースを自動化する時間です!

📝 目次


  • What will we automate?
  • Repository structure
  • Configure GitHub Action
  • Troubleshooting

  • Time to release!
  • Real-life example
  • Questions for better understanding
  • Exercises for independent execution
  • 🤔 何が自動化されますか?


    あなたが別のプラットフォーム/OSのためにGOに書かれたプロジェクトをリリースするの課題に直面した場合は、すでにあなたが遭遇する可能性のある問題の種類を知っている.そうでなければ、私はいくつかを持ってきます.
  • あなたは常に(例えば、パス内の特定のスラッシュ)各OSの機能を監視する必要があります.
  • 手動でアーカイブを作成し、Githubのリリースページにアップロードする必要があります.
  • すべてのコミットを見る必要がありますCHANGELOG 新しいバージョン.
  • ...そして、より多く!
  • それで、私があなたにあなたの倉庫でタグを作成した後に自動的にこれ(そしてより多く)をするのを許すツールがあるとあなたに話すならば、どうですか?
    私は冗談ではない、それはあなたがこのすべてを行うことができますGoReleaser ギタブアクション👇

    ゴーレム / ゴーレムアクション


    Octocat : Gorelezerのためのアクション



    ゴーレムアクション


    GitHub Action ゴーレズ






  • Usage
  • Workflow
  • Run on new tag
  • Signing
  • Upload artifacts
  • Install Only

  • Customizing
  • inputs
  • environment variables
  • Limitation
  • Development
  • License
  • 用途


    ワークフロー

    name: goreleaser
    
    on:
      pull_request:
      push:
    
    jobs:
      goreleaser:
        runs-on: ubuntu-latest
        steps:
          -
            name: Checkout
            uses: actions/checkout@v2
            with:
              fetch-depth: 0
          -
            name: Set up Go
            uses: actions/setup-go@v2
            with:
              go-version: 1.15
          -
            name: Run GoReleaser
            uses: goreleaser/goreleaser-action@v2
            with:
              # either 'goreleaser' (default) or 'goreleaser-pro'
              distribution: goreleaser
              version: latest
              args: release --rm-dist
            env:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
              # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' distribution
              # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}

    IMPORTANT: note the fetch-depth: 0 input in Checkout step. It is required for the changelog to work correctly.

    新しいタグで走る

    If you want to run GoReleaser only…

    ↑ Table of contents

    👀 リポジトリ構造

    For a short, project will be contain very simple function:

    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("Hi, DEV World! 😉")
    }
    
    リポジトリの構造は以下のように簡単になります.
    .
    ├── .github
    │   └── workflows
    │       └── release_build.yml  # <-- GitHub Action
    └── main.go                    # <-- main function
    
    ↑ Table of contents

    🤖 アクションを設定する


    話の主人公に移りましょう.ファイルの一覧を見るrelease_build.yml , あなたがGithubアクションについての私の前の記事を読んだならば😏):
    name: Release Go project
    
    on:
      push:
        tags:
          - "*" # triggers only if push new tag version, like `0.8.4` or else
    
    jobs:
      build:
        name: GoReleaser build
        runs-on: ubuntu-latest
    
        steps:
          - name: Check out code into the Go module directory
            uses: actions/checkout@v2
            with:
              fetch-depth: 0 # See: https://goreleaser.com/ci/actions/
    
          - name: Set up Go 1.14
            uses: actions/setup-go@v2
            with:
              go-version: 1.14
            id: go
    
          - name: Run GoReleaser
            uses: goreleaser/goreleaser-action@master
            with:
              version: latest
              args: release --rm-dist
            env:
              GITHUB_TOKEN: ${{ secrets.GO_RELEASER_GITHUB_TOKEN }}
    
    はい、githubは自動的にGITHUB_TOKEN あなたのワークフローで使用する秘密repo スコープhere :

    そして今、新しいGithub秘密を作成しますGO_RELEASER_GITHUB_TOKEN 私の場合)

    ↑ Table of contents

    ✅ トラブルシューティング


    あなたのファイルmain() 関数はリポジトリのルートディレクトリにありません.Goreleaserはエラーを生成します.したがって、次のように、ステップ設定で正しいディレクトリを指定する必要があります.
    # ...
    
        steps:
    
          # ...
    
          - name: Run GoReleaser
            uses: goreleaser/goreleaser-action@master
            with:
              version: latest
              args: release --rm-dist
              workdir: ./cmd/myapp # <-- path to directory with main() func
            env:
              GITHUB_TOKEN: ${{ secrets.GO_RELEASER_GITHUB_TOKEN }}
    
    ↑ Table of contents

    🚀 リリースする時間!


    タグで新しいリリースを作成します0.8.4 ) アクションページに次のようにしてください.

    正常にジョブを完了した後、素晴らしい結果を表示するには、ページを開きます.CHANGELOG すべてのコミット(2つのバージョンの間).checksums.txt すべてのプラットフォーム用のコンパイルされたアプリケーションとファイルとアップロードされたアーカイブ!

    それだ!それと同じように!🎉
    ↑ Table of contents

    🎯 実生活例


    上記のスクリーンショットが十分でないならば、私はあなたが私が使用する私のプロジェクトの1つを見るために、あなたを招待しますGoReleaser 実生活における行動

    アプリを作成 / CLI


    ✨ バックエンド、フロントエンド、および1つのCLIコマンドを実行して自動化を展開すると、新しい生産準備プロジェクトを作成!


    クリエイトアプリ


    バックエンド(Golang)、フロントエンド(JavaScript、typescript)で、新しい生産準備プロジェクトを作成し、1つのCLIコマンドを実行することによって自動化(ansible、Docker)を展開します.フォーカスを書くコードとビジネスロジックの思考に!CLIは残りの世話をします.

    ⚡️ クイックスタート


    まず第一にdownload をインストールします.バージョン1.17 が必要です.

    If you're looking for the Create Go App CLI for Go 1.16, you can find it here.


    インストールは go install インストールされたバイナリのコマンドと名前の変更$GOPATH/bin :
    Githubをインストールします.com/create/cli/v 3/cmd/cgapp@latest
    また、MacOSやGNU/Linuxユーザを経由してインストールする方法Homebrew :
    新しい式をタップします.
    専用のアプリケーションを作成する
    インストール
    をインストールしてください
    インタラクティブなコンソールUI(またはCUIのショートカット)を使用して新しいフォルダを作成します.
    CGappクリエイト
    次に、生成された可用性インベントリファイルを開きますhosts.ini ) そして
    View on GitHub
    ↑ Table of contents

    💬 より良い理解のための質問

  • GITHUBアクション設定のパラメータは、ジョブをトリガーしているか?
  • なぜ定義する必要があるのかfetch-depth: 0 for actions/checkout アクション?
  • 何が-rm-dist 引数平均Run GoReleaser ステップ?
  • ↑ Table of contents

    ✏️ 独立執行演習

  • あなたが記事で見たすべてを繰り返します、しかし、あなた自身のGolangプロジェクトで.以下のコメントであなたの結果とリンクをあなたのより短いウェブサイトに書いてください!
  • それはメジャーバージョンのためだけに動作するようにトリガ値を変更します.してください、ソフトウェアバージョン管理についての詳細を読むhere .
  • ↑ Table of contents

    写真/画像

  • アクションリポジトリ&ウェブサイト1 , 2 )
  • GitHubリポジトリ設定link )
  • ピーエス


    あなたがより望むならば、下記のコメントを書いて、私について来てください.THX!😘