[GO] Bitbucket → Migration GitHub partie 3 ~ Environnement CI ~

Il s'agit d'un enregistrement d'utilisateurs de Mercurial commençant à utiliser Git et pris en charge par GitHub.

Je crée des outils exclusivement avec Go.

Dans cet article, en tant que méthode de libération automatique avec le mécanisme de CI, Utilisez GoReleaser sur GitHub Actions pour définir le binaire à télécharger vers les versions GitHub pour chaque balise.

master→main

Si vous ne le faites pas séparément, cela n'affectera pas le travail ultérieur et le succès des actions GitHub.

Renommez la branche par défaut de Git (GitHub) [https://qiita.com/e_chan1007/items/ad3e849b7e04fcf42fad), mais changez le nom de la branche par défaut en main.

Dans l'article ci-dessus, j'ai configuré pour changer de branche localement, puis je le pousse pour changer la branche par défaut sur GitHub. Je n'oublie pas de changer de succursale localement, donc je pense que c'est une bonne façon de le faire. __ Dans tous les cas, il semble que la branche par défaut de GitHub ne puisse se faire que sur le site GitHub. __

Si vous dites "vous n'avez besoin de changer que sur GitHub pour le moment", cela sera complété sur le site GitHub. (Procédure ci-dessous) Cependant, puisque nous modifierons le fichier en relation avec GitHub Actions après cela, vous n'avez pas à vous soucier de le compléter sur le site.

Créer une branche principale sur GitHub

image.png

Entrez "principal"

image.png

À ce stade, la branche par défaut n'a pas encore changé. (↓ "default" est attaché au master)

image.png

Changer de branche par défaut

Afficher une liste de succursales

image.png

Cliquez sur "Modifier la branche par défaut"

image.png

Basculez vers le menu principal et appuyez sur le bouton "Mettre à jour" à côté

image.png

Revenez à la page de la liste des branches et cliquez sur l'icône de la corbeille sous le maître

image.png

Sera comme ça

image.png

Changer localement

git pull
git switch main

Ceci conclut la procédure de changement de succursale.

GitHub Actions

Créer et placer deux fichiers

Créez les deux fichiers suivants.

Emplacement du fichier à créer

image.png

Voir ci-dessous pour le contenu du fichier.

.github/workflows/release.yml

Il semble que le nom du fichier ne doit pas nécessairement être release.yml séparément.


name: release
on:
  push:
    tags:
    - "v[0-9]+.[0-9]+.[0-9]+"
jobs:
  goreleaser:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Setup Go
        uses: actions/setup-go@v2
      - name: Run GoReleaser
        uses: goreleaser/goreleaser-action@v2
        with:
          version: latest
          args: release --rm-dist
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Il est écrit exclusivement en utilisant uses: xxx, mais vous pouvez utiliser des commandes comme sur le shell avec run: xxx.

GoReleaser n'autorise pas les conditions git dirty, donc si vous téléchargez et utilisez l'outil avec go get, vous devrez peut-être faire run: go mod tidy avant d'exécuter GoReleaser.

L'action est exécutée au moment de git push --tags. Il semble que GoReleaser ne peut pas être publié plusieurs fois pour le même tag. De plus, si je mets la description au début sur on: push: branches: --main (sans saut de ligne), pour une raison quelconque, Action n'a pas été exécutée en premier lieu.

Ajouté goreleaser.yml

project_name: vvin
env:
  - GO111MODULE=on
before:
  hooks:
    - go mod tidy
builds:
  - binary: vvin
    flags:
      - -trimpath
    ldflags:
      - -s -w
      - -X main.Version={{.Version}}
      - -X main.Revision={{.ShortCommit}}
    env:
      - CGO_ENABLED=0
    goos:
      - windows
      - darwin
      - linux
    goarch:
      - amd64
      - 386
    hooks:
      post: upx --lzma '{{ .Path }}'
archives:
  - name_template: '{{ .ProjectName }}_v{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
    replacements:
      darwin: darwin
      linux: linux
      windows: windows
      386: 386
      amd64: amd64
    format_overrides:
      - goos: windows
        format: zip
release:
  prerelease: auto

: heart_eyes: Parmi les outils de publication, je suis reconnaissant de pouvoir ajouter -trimpath et d'exécuter upx.

Si la balise git est v1.2.3,{{.Version}}semble être 1.2.3.

Vous pouvez également faire goreleaser init pour créer un modèle pour .goreleaser.yml. Bien qu'il soit différent du contenu ci-dessus.

Si vous souhaitez ajouter des fichiers à l'archive

Si vous souhaitez inclure diverses choses dans la version des versions de GitHub, ajoutez-les à archives:.

archives:
  - name_template: '{{ .ProjectName }}_v{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
    replacements:

      :

    files:
      - LICENSE*
      - README*
      - sample.bat

La valeur par défaut pour files: semble être LICENSE *, README *. Cependant, si vous écrivez files: comme ci-dessus, ce paramètre semble disparaître, vous devez donc également inclure la valeur par défaut.

push

Après avoir validé les modifications ci-dessus, git push, ajoutez une nouvelle balise, ainsi que git push --tags.

Les balises sont attribuées au format «v {Major}. {Minor}. {Patch}». Comme spécifié dans release.yml défini ci-dessus, il ne sera exécuté que lorsqu'une balise de ce format est poussée.

résultat

image.png

(Il y a peu de fichiers, mais j'ai changé le .goreleaser.yml ci-dessus en binaire pour Windows uniquement)

Comparé à CircleCI

Quand j'utilisais Mercurial sur BitBucket, j'utilisais CircleCI. Depuis que je suis passé à GitHub, je voulais expérimenter les actions GitHub, alors j'ai changé.

J'utilise CircleCI dans mon plan gratuit, mais les actions GitHub prennent maintenant environ 30 secondes au lieu de 10 secondes.

De plus, je pense que c'est une partie liée aux spécifications GoReleaser, mais il semble qu'il ne puisse pas être mis à niveau avec succès vers les versions sans changer la balise. C'est un peu stressant si vous ne voulez pas changer la balise car la fonction n'a pas changé ...

Recommended Posts

Bitbucket → Migration GitHub partie 3 ~ Environnement CI ~