برنامه نویسی

نحوه انتشار به Homebrew با Goreleaser ، Actions Github و انتشار معنایی

در این مقاله شما را از طریق فرآیند خودکار سازی نسخه های پروژه GO خود با اقدامات GoreLeaser و GitHub راهنمایی می کند. برچسب ها با انتشار معنایی تولید می شوند. همه اینها به هم گره خورده اند ، بنابراین هر ادغام به Main به طور خودکار با یک تغییر خودکار ایجاد می شود و سپس می تواند از طریق شیر آب خانگی نصب شود.

1. تنظیمات GitHub تنظیم

اولین چیزی که شما نیاز دارید یک مخزن دوم GitHub برای ذخیره فرمول Homebrew است. نام این باید با شروع شود homebrew- (این در اینجا بیشتر توضیح داده شده است). من فرمی را توصیه می کنم که نام پروژه فعلی شما باشد و فقط آماده شود homebrew- به آن

به عنوان مثال ، من دارم github.com/hadlow/gopublish وت github.com/hadlow/homebrew-gopublishبشر

2. نشانه های دسترسی را ایجاد کنید

نکته بعدی تنظیم این است که نشانه دسترسی شخصی GitHub شما است. این مورد برای انتشار معنایی و GoreLeaser برای ایجاد برچسب ، فشار فایل و غیره استفاده می شود.

برای ایجاد یک نشانه ، به GitHub بروید و روی عکس پروفایل خود ، در سمت راست بالا کلیک کنید. سپس به تنظیمات و سپس تنظیمات توسعه دهنده در سمت چپ بروید. سپس بر روی نشانه های دسترسی شخصی و نشانه های ریز دانه کلیک کنید ، سپس New Token تولید کنید.

تصاویر نوار کناری توکن های شخصی

نشانه خود را چیزی توصیفی نامگذاری کنید. من با GH_TOKEN_GO_PUBLISHبشر اکنون به پایین بروید و به مخزن اصلی و هم دسترسی پیدا کنید homebrew- مخزن

برای مجوزها از موارد زیر استفاده می کنم:

  • اقدامات: بخوانید و بنویسید
  • وضعیت تعهد: بخوانید و بنویسید
  • مطالب: بخوانید و بنویسید
  • استقرار: بخوانید و بنویسید
  • محیط: فقط خواندنی
  • اسرار: فقط خواندنی
  • متغیرها: فقط خواندنی

اکنون می توانید پیش بروید و نشانه را ایجاد کنید. این نشانه را کپی کنید زیرا در مرحله بعدی به آن احتیاج خواهیم داشت.

3. نشانه دسترسی را به محیط اضافه کنید

به تنظیمات مخزن خود بروید و به محیط ها بروید. یک محیط جدید به نام “انتشار” ایجاد کنید و یک راز محیط را اضافه کنید. آن را صدا کنید GH_TOKEN و در نشانه دسترسی خود ایجاد شده در مرحله قبل چسبانده شوید.

4. انتشار معنایی را اضافه کنید

قبل از افزودن انتشار معنایی ، به یک پرونده اقدامات GitHub نیاز خواهیم داشت. پرونده ای به نام Reselle.yml ایجاد کنید و آن را در مخزن اصلی خود در فهرست .github/گردش کار قرار دهید. چسباندن در زیر:

name: release

on:
  push:
    branches:
      - main

jobs:
  main:
    runs-on: ubuntu-latest
    environment:
      name: Release
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          persist-credentials: false
      - name: Semantic Release
        uses: cycjimmy/semantic-release-action@v4
        with:
          extra_plugins: |
            @semantic-release/git
            @semantic-release/exec
            @semantic-release/changelog
        env:
          GH_TOKEN: ${{ secrets.GH_TOKEN }}
      - name: Run GoReleaser
        env:
          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
          HOMEBREW_GITHUB_API_TOKEN: ${{ secrets.GH_TOKEN }}
        run: |
          curl -sL https://git.io/goreleaser | bash
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بعد ، در ریشه repo خود ، پرونده ای به نام ایجاد کنید .releaserc.json و چسباندن در:

{
  "branches": ["main"],
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/release-notes-generator",
    "@semantic-release/changelog",
    "@semantic-release/github",
    [
      "@semantic-release/git",
      {
        "assets": ["CHANGELOG.md"],
        "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
      }
    ]
  ]
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

5. Goreleaser را پیکربندی کنید

بعد می خواهیم پیکربندی GoreLeaser را اضافه کنیم. یک پرونده در ریشه repo خود ایجاد کنید .goreleaser.yamlبشر چسباندن در زیر:

version: 2

project_name: 

before:
  hooks:
    # You may remove this if you don't use go modules.
    - go mod tidy
    # you may remove this if you don't need go generate
    - go generate ./...

builds:
  - env:
      - CGO_ENABLED=0
    goos:
      - linux
      - windows
      - darwin

archives:
  - format: tar.gz
    name_template: >-
      {{ .ProjectName }}_
      {{- title .Os }}_
      {{- if eq .Arch "amd64" }}x86_64
      {{- else if eq .Arch "386" }}i386
      {{- else }}{{ .Arch }}{{ end }}
      {{- if .Arm }}v{{ .Arm }}{{ end }}
    # use zip for windows archives
    format_overrides:
      - goos: windows
        format: zip

changelog:
  sort: asc
  filters:
    exclude:
      - "^docs:"
      - "^test:"

brews:
  -
    name: 
    commit_author:
      name: 
      email: 
    commit_msg_template: "Brew formula update for {{ .ProjectName }} version {{ .Tag }}"
    directory: Formula
    description: " DESCRIPTION>"
    license: " LICENSE>"
    install: |
      bin.install ""
    test: |
      system "#{bin}/ --version"
    # Repository to push the generated files to.
    repository:
      owner: 
      name: homebrew-
      branch: main
      token: "{{ .Env.GITHUB_TOKEN }}"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در صورت لزوم همه متغیرها را به روز کنید.

6. فشار را فشار دهید

اکنون می توانید این تغییرات را مرتکب و فشار دهید. شما باید چیزی را در برگه اقدامات خود مشاهده کنید. به این مراحل نگاهی بیندازید ، آنها باید در حال ساخت و انتشار برنامه GO شما باشند.

اقدامات GitHub اقدامات تصاویر

اکنون نگاهی به repo خود بیندازید ، باید یک برچسب ایجاد شده توسط انتشار معنایی داشته باشد.

تصویر برچسب GitHub

و بعد ، در خود homebrew- repo ، شما باید یک پوشه فرمول را ببینید.

فرمول در تصویر repo git

7. نصب برنامه ما

برای نصب ، دستور HomeBrew TAP را با استفاده از قالب اجرا کنید brew tap /، برای این مثال چیزی شبیه به این است:

brew tap hadlow/gopublish
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شما باید خروجی را ببینید که چیزی شبیه به این است:

==> Tapping hadlow/gopublish
Cloning into '/opt/homebrew/Library/Taps/hadlow/homebrew-gopublish'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 12 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (12/12), done.
Resolving deltas: 100% (2/2), done.
Tapped 2 formulae (14 files, 9.8KB).
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس می توانیم با:

brew install gopublish
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

که سپس به ما می دهد:

==> Fetching hadlow/gopublish/gopublish
==> Downloading https://github.com/hadlow/gopublish/releases/download/v1.0.1/gopublish_Darwin_arm64.tar.gz
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/92130980
################################################################################################### 100.0%
==> Installing gopublish from hadlow/gopublish
🍺  /opt/homebrew/Cellar/gopublish/1.0.1: 5 files, 1.5MB, built in 0 seconds
==> Running `brew cleanup gopublish`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سپس وقتی من GOPublish را اجرا می کنم ، کار می کند!

> gopublish
Hello, world
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پیچیدن

و این تقریباً همین است. شما می توانید همه این موارد را متناسب با نیازهای خود اصلاح کنید ، اما من می خواستم آن را تا حد امکان ساده نگه دارم به خاطر آسانتر کردن این راهنما.

اگر سوالی دارید ، خوشحال می شوم که در نظرات به آنها پاسخ دهم!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا