version: 2

project_name: lego

builds:
  - binary: lego

    main: ./cmd/lego/
    env:
      - CGO_ENABLED=0
    flags:
      - -trimpath
    ldflags:
      - -s -w -X main.version={{.Version}}

    goos:
      - linux
      - darwin
      - windows
      - freebsd
      - openbsd
      - solaris
    goarch:
      - amd64
      - 386
      - arm
      - arm64
      - mips
      - mipsle
      - mips64
      - mips64le
    goarm:
      - 7
      - 6
      - 5
    gomips:
      - hardfloat
      - softfloat

    ignore:
      - goos: darwin
        goarch: 386
      - goos: openbsd
        goarch: arm

changelog:
  sort: asc
  filters:
    exclude:
      - '(?i)^chore:'
      - '(?i)^Detach v[\d|.]+'
      - '(?i)^Prepare release v[\d|.]+'

archives:
  - id: lego
    name_template: '{{ .ProjectName }}_v{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}'
    formats: ['tar.gz']
    format_overrides:
      - goos: windows
        formats: ['zip']
    files:
      - LICENSE
      - CHANGELOG.md

docker_manifests:
  - name_template: 'goacme/lego:{{ .Tag }}'
    image_templates:
      - 'goacme/lego:{{ .Tag }}-amd64'
      - 'goacme/lego:{{ .Tag }}-arm64'
      - 'goacme/lego:{{ .Tag }}-armv7'
  - name_template: 'goacme/lego:latest'
    image_templates:
      - 'goacme/lego:{{ .Tag }}-amd64'
      - 'goacme/lego:{{ .Tag }}-arm64'
      - 'goacme/lego:{{ .Tag }}-armv7'
  - name_template: 'goacme/lego:v{{ .Major }}.{{ .Minor }}'
    image_templates:
      - 'goacme/lego:v{{ .Major }}.{{ .Minor }}-amd64'
      - 'goacme/lego:v{{ .Major }}.{{ .Minor }}-arm64'
      - 'goacme/lego:v{{ .Major }}.{{ .Minor }}-armv7'

dockers:
  - use: buildx
    goos: linux
    goarch: amd64
    dockerfile: buildx.Dockerfile
    image_templates:
      - 'goacme/lego:latest-amd64'
      - 'goacme/lego:{{ .Tag }}-amd64'
      - 'goacme/lego:v{{ .Major }}.{{ .Minor }}-amd64'
    build_flag_templates:
      - '--pull'
      # https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys
      - '--label=org.opencontainers.image.title={{.ProjectName}}'
      - '--label=org.opencontainers.image.description=Lets Encrypt/ACME client and library written in Go'
      - '--label=org.opencontainers.image.source={{.GitURL}}'
      - '--label=org.opencontainers.image.url={{.GitURL}}'
      - '--label=org.opencontainers.image.documentation=https://go-acme.github.io/lego'
      - '--label=org.opencontainers.image.created={{.Date}}'
      - '--label=org.opencontainers.image.revision={{.FullCommit}}'
      - '--label=org.opencontainers.image.version={{.Version}}'
      - '--platform=linux/amd64'

  - use: buildx
    goos: linux
    goarch: arm64
    dockerfile: buildx.Dockerfile
    image_templates:
      - 'goacme/lego:latest-arm64'
      - 'goacme/lego:{{ .Tag }}-arm64'
      - 'goacme/lego:v{{ .Major }}.{{ .Minor }}-arm64'
    build_flag_templates:
      - '--pull'
      # https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys
      - '--label=org.opencontainers.image.title={{.ProjectName}}'
      - '--label=org.opencontainers.image.description=Lets Encrypt/ACME client and library written in Go'
      - '--label=org.opencontainers.image.source={{.GitURL}}'
      - '--label=org.opencontainers.image.url={{.GitURL}}'
      - '--label=org.opencontainers.image.documentation=https://go-acme.github.io/lego'
      - '--label=org.opencontainers.image.created={{.Date}}'
      - '--label=org.opencontainers.image.revision={{.FullCommit}}'
      - '--label=org.opencontainers.image.version={{.Version}}'
      - '--platform=linux/arm64'

  - use: buildx
    goos: linux
    goarch: arm
    goarm: '7'
    dockerfile: buildx.Dockerfile
    image_templates:
      - 'goacme/lego:latest-armv7'
      - 'goacme/lego:{{ .Tag }}-armv7'
      - 'goacme/lego:v{{ .Major }}.{{ .Minor }}-armv7'
    build_flag_templates:
      - '--pull'
      # https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys
      - '--label=org.opencontainers.image.title={{.ProjectName}}'
      - '--label=org.opencontainers.image.description=Lets Encrypt/ACME client and library written in Go'
      - '--label=org.opencontainers.image.source={{.GitURL}}'
      - '--label=org.opencontainers.image.url={{.GitURL}}'
      - '--label=org.opencontainers.image.documentation=https://go-acme.github.io/lego'
      - '--label=org.opencontainers.image.created={{.Date}}'
      - '--label=org.opencontainers.image.revision={{.FullCommit}}'
      - '--label=org.opencontainers.image.version={{.Version}}'
      - '--platform=linux/arm/v7'

snapcrafts:
  - name_template: "{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}"
    disable: false
    publish: true
    grade: stable
    confinement: strict
    license: MIT
    base: core22
    summary: Lego is a Let's Encrypt/ACME client.
    description: |
      Lego is a Let's Encrypt/ACME client written in Go.
      
      The lego snap makes it easy to install and use Lego on any Linux distribution that supports snaps.
      
      Usage:
      * `sudo snap install lego`
      * `sudo lego --email="you@example.com" --domains="example.com" --server=https://acme-staging-v02.api.letsencrypt.org/directory --http --http.port :8080 run
    apps:
      lego:
        command: lego
        environment:
          LEGO_PATH: /var/snap/lego/common/.lego
        plugs:
          - network-bind

aurs:
  - description: "Let s Encrypt client and ACME library written in Go"
    skip_upload: false
    homepage: https://go-acme.github.io/lego/
    name: 'lego-bin'
    provides:
      - lego
    maintainers:
      - "Fernandez Ludovic <lfernandez dot dev at gmail dot com>"
    license: APACHE
    private_key: "{{ .Env.AUR_KEY }}"
    git_url: "ssh://aur@aur.archlinux.org/lego-bin.git"
    commit_author:
      name: ldez
      email: ldez@users.noreply.github.com
    package: |-
      # Bin
      install -Dm755 "./lego" "${pkgdir}/usr/bin/lego"

      # License
      install -Dm644 "./LICENSE" "${pkgdir}/usr/share/licenses/lego/LICENSE"
