From 3ebc7461b2f32941a005c33925f9040739ad017a Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Wed, 25 Jun 2025 09:24:56 -0300 Subject: [PATCH] ci: add ci --- .github/workflows/build.yml | 9 +++ .github/workflows/dependabot-sync.yml | 17 ++++++ .github/workflows/lint-sync.yml | 14 +++++ .github/workflows/lint.yml | 8 +++ .github/workflows/nightly.yml | 35 ++++++++++++ .github/workflows/release.yml | 38 +++++++++++++ .goreleaser.yaml | 79 +++++++++++++++++++++++++++ 7 files changed, 200 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/dependabot-sync.yml create mode 100644 .github/workflows/lint-sync.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/nightly.yml create mode 100644 .github/workflows/release.yml create mode 100644 .goreleaser.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000000000000000000000000000000000..41abd56cc954c5848f3c0b428ffd0172d1d0b34b --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,9 @@ +name: build +on: [push, pull_request] + +jobs: + build: + uses: charmbracelet/meta/.github/workflows/build.yml@main + with: + go-version: "" + go-version-file: ./go.mod diff --git a/.github/workflows/dependabot-sync.yml b/.github/workflows/dependabot-sync.yml new file mode 100644 index 0000000000000000000000000000000000000000..9b082590bda3f7ec5df3e1032c4f35bb11502e6b --- /dev/null +++ b/.github/workflows/dependabot-sync.yml @@ -0,0 +1,17 @@ +name: dependabot-sync +on: + schedule: + - cron: "0 0 * * 0" # every Sunday at midnight + workflow_dispatch: # allows manual triggering + +permissions: + contents: write + pull-requests: write + +jobs: + dependabot-sync: + uses: charmbracelet/meta/.github/workflows/dependabot-sync.yml@main + with: + repo_name: ${{ github.event.repository.name }} + secrets: + gh_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} diff --git a/.github/workflows/lint-sync.yml b/.github/workflows/lint-sync.yml new file mode 100644 index 0000000000000000000000000000000000000000..ecf8580246f0165842891ee5f6e28992d15d68ff --- /dev/null +++ b/.github/workflows/lint-sync.yml @@ -0,0 +1,14 @@ +name: lint-sync +on: + schedule: + # every Sunday at midnight + - cron: "0 0 * * 0" + workflow_dispatch: # allows manual triggering + +permissions: + contents: write + pull-requests: write + +jobs: + lint: + uses: charmbracelet/meta/.github/workflows/lint-sync.yml@main diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000000000000000000000000000000000000..a1d6d0e5124114e47fb85180f0bd7701a0e87a35 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,8 @@ +name: lint +on: + push: + pull_request: + +jobs: + lint: + uses: charmbracelet/meta/.github/workflows/lint.yml@main diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000000000000000000000000000000000000..2478622c5fc37ac9325464e0b3f25709fe484081 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,35 @@ +name: deploy development + +on: + push: + branches: + - main + +jobs: + goreleaser: + uses: charmbracelet/meta/.github/workflows/nightly.yml@main + with: + go_version: stable + upload_artifacts: false + secrets: + docker_username: ${{ secrets.DOCKERHUB_USERNAME }} + docker_token: ${{ secrets.DOCKERHUB_TOKEN }} + goreleaser_key: ${{ secrets.GORELEASER_KEY }} + gh_pat: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + + deploy: + name: Run deploy workflow + runs-on: ubuntu-latest + needs: [goreleaser] + steps: + - uses: benc-uk/workflow-dispatch@v1 + with: + workflow: Update + repo: charmbracelet/infra-dev + ref: main + token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + inputs: | + { + "app": "fur + "image": "ghcr.io/charmbracelet/fur:${{ github.sha }}-devel" + } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000000000000000000000000000000000..8879fd65109759d2cda1f6146ad40112ba086db4 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,38 @@ +name: deploy production + +on: + push: + tags: + - v*.*.* + +concurrency: + group: goreleaser + cancel-in-progress: true + +jobs: + goreleaser: + uses: charmbracelet/meta/.github/workflows/goreleaser.yml@main + with: + go_version: stable + secrets: + docker_username: ${{ secrets.DOCKERHUB_USERNAME }} + docker_token: ${{ secrets.DOCKERHUB_TOKEN }} + goreleaser_key: ${{ secrets.GORELEASER_KEY }} + gh_pat: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + + deploy: + name: Run deploy workflow + runs-on: ubuntu-latest + needs: [goreleaser] + steps: + - uses: benc-uk/workflow-dispatch@v1 + with: + workflow: Update + repo: charmbracelet/infra-prod + ref: main + token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + inputs: | + { + "app": "fur", + "image": "ghcr.io/charmbracelet/fur:${{ github.ref_name }}" + } diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e4d53b205050b2b21a60ab7caa87e34df55c6b72 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,79 @@ +# This is an example .goreleaser.yml file with some sensible defaults. +# Make sure to check the documentation at https://goreleaser.com + +# The lines below are called `modelines`. See `:help modeline` +# Feel free to remove those if you don't want/need to use them. +# yaml-language-server: $schema=https://goreleaser.com/static/schema-pro.json +# vim: set ts=2 sw=2 tw=0 fo=cnqoj + +version: 2 +pro: true + +before: + hooks: + - go mod tidy + +builds: + - binary: fur + env: + - CGO_ENABLED=0 + main: . + ldflags: -s -w -X main.Version=v{{ .Version }} -X main.CommitSHA={{ .Commit }} -X main.CommitDate={{ .CommitDate }} + targets: + - linux_amd64 + - linux_arm64 + +checksum: + name_template: "checksums.txt" + +snapshot: + version_template: "{{ incpatch .Version }}-snapshot" + +nightly: + version_template: "{{ incpatch .Version }}-devel" + +dockers: + - image_templates: + - "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}-arm64" + goarch: arm64 + build_flag_templates: + - --platform=linux/arm64 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.source={{ .GitURL }} + - --label=org.opencontainers.image.version=v{{ .Version }} + - --label=org.opencontainers.image.created={{ .Date }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=MIT + dockerfile: goreleaser.dockerfile + use: buildx + - image_templates: + - "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}-amd64" + goarch: amd64 + build_flag_templates: + - --platform=linux/amd64 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.source={{ .GitURL }} + - --label=org.opencontainers.image.version=v{{ .Version }} + - --label=org.opencontainers.image.created={{ .Date }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=MIT + dockerfile: goreleaser.dockerfile + use: buildx + +docker_manifests: + - name_template: "{{ if not .IsNightly }}ghcr.io/charmbracelet/{{ .ProjectName }}:latest{{ end }}" + image_templates: + - "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}-amd64" + - "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}-arm64" + - name_template: "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}" + image_templates: + - "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}-amd64" + - "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}-arm64" + - name_template: "ghcr.io/charmbracelet/{{ .ProjectName }}:{{ .Commit }}{{ if .IsNightly }}-devel{{ end }}" + image_templates: + - "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}-amd64" + - "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}-arm64" + - name_template: "{{ if .IsNightly }}ghcr.io/charmbracelet/{{ .ProjectName }}:nightly{{ end }}" + image_templates: + - "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}-amd64" + - "ghcr.io/charmbracelet/{{ .ProjectName }}:v{{ .Version }}-arm64"