# This is an example .goreleaser.yml file with some sensible defaults.
# Make sure to check the documentation at https://goreleaser.com

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

snapshot:
  name_template: "{{ incpatch .Version }}-next"

# gomod:
#   proxy: true

report_sizes: true

# metadata:
#   mod_timestamp: "{{ .CommitTimestamp }}"

builds:
  - binary: openim-api
    id: openim-api
    main: ./cmd/openim-api/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-cmdutils
    id: openim-cmdutils
    main: ./cmd/openim-cmdutils/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-crontask
    id: openim-crontask
    main: ./cmd/openim-crontask/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-msggateway
    id: openim-msggateway
    main: ./cmd/openim-msggateway/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-msgtransfer
    id: openim-msgtransfer
    main: ./cmd/openim-msgtransfer/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-push
    id: openim-push
    main: ./cmd/openim-push/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-rpc-auth
    id: openim-rpc-auth
    main: ./cmd/openim-rpc/openim-rpc-auth/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-rpc-conversation
    id: openim-rpc-conversation
    main: ./cmd/openim-rpc/openim-rpc-conversation/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-rpc-friend
    id: openim-rpc-friend
    main: ./cmd/openim-rpc/openim-rpc-friend/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-rpc-group
    id: openim-rpc-group
    main: ./cmd/openim-rpc/openim-rpc-group/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-rpc-msg
    id: openim-rpc-msg
    main: ./cmd/openim-rpc/openim-rpc-msg/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-rpc-third
    id: openim-rpc-third
    main: ./cmd/openim-rpc/openim-rpc-third/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

  - binary: openim-rpc-user
    id: openim-rpc-user
    main: ./cmd/openim-rpc/openim-rpc-user/main.go
    goos:
      - darwin
      - windows
      - linux
    goarch:
      - s390x
      - mips64
      - mips64le
      - amd64
      - ppc64le
      - arm64
    goarm:
      - "6"
      - "7"

archives:
  - format: tar.gz
    # this name template makes the OS and Arch compatible with the results of uname.
    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
    files:
      - LICENSE
      - README.md
      - CHANGELOG/*
      - CONTRIBUTING.md
      - docs/*
      - src: "*.md"
        dst: docs

        # Strip parent folders when adding files to the archive.
        strip_parent: true

        # File info.
        # Not all fields are supported by all formats available formats.
        #
        # Default: copied from the source file
        info:
          # Templates: allowed (since v1.14)
          owner: root

          # Templates: allowed (since v1.14)
          group: root

          # Must be in time.RFC3339Nano format.
          #
          # Templates: allowed (since v1.14)
          mtime: "{{ .CommitDate }}"

          # File mode.
          mode: 0644

    format_overrides:
    - goos: windows
      format: zip

changelog:
  sort: asc
  use: github
  filters:
    exclude:
      - "^test:"
      - "^chore"
      - "merge conflict"
      - Merge pull request
      - Merge remote-tracking branch
      - Merge branch
      - go mod tidy
  groups:
    - title: Dependency updates
      regexp: '^.*?(feat|fix)\(deps\)!?:.+$'
      order: 300
    - title: "New Features"
      regexp: '^.*?feat(\([[:word:]]+\))??!?:.+$'
      order: 100
    - title: "Security updates"
      regexp: '^.*?sec(\([[:word:]]+\))??!?:.+$'
      order: 150
    - title: "Bug fixes"
      regexp: '^.*?fix(\([[:word:]]+\))??!?:.+$'
      order: 200
    - title: "Documentation updates"
      regexp: ^.*?doc(\([[:word:]]+\))??!?:.+$
      order: 400
    - title: "Build process updates"
      regexp: ^.*?build(\([[:word:]]+\))??!?:.+$
      order: 400
    - title: Other work
      order: 9999

# dockers:
#   - image_templates:
#       - "openimsdk/open-im-server:{{ .Tag }}-amd64"
#       - "ghcr.io/goreleaser/goreleaser:{{ .Tag }}-amd64"
#     dockerfile: Dockerfile
#     use: buildx
#     build_flag_templates:
#       - "--pull"
#       - "--label=io.artifacthub.package.readme-url=https://raw.githubusercontent.com/OpenIMSDK/Open-IM-Server/main/README.md"
#       - "--label=io.artifacthub.package.logo-url=hhttps://github.com/OpenIMSDK/Open-IM-Server/blob/main/assets/logo/openim-logo-green.png"
#       - '--label=io.artifacthub.package.maintainers=[{"name":"Xinwei Xiong","email":"3293172751nss@gmail.com"}]'
#       - "--label=io.artifacthub.package.license=Apace-2.0"
#       - "--label=org.opencontainers.image.description=OpenIM Open source top instant messaging system"
#       - "--label=org.opencontainers.image.created={{.Date}}"
#       - "--label=org.opencontainers.image.name={{.ProjectName}}"
#       - "--label=org.opencontainers.image.revision={{.FullCommit}}"
#       - "--label=org.opencontainers.image.version={{.Version}}"
#       - "--label=org.opencontainers.image.source={{.GitURL}}"
#       - "--platform=linux/amd64"
#     extra_files:
#       - scripts/entrypoint.sh
#   - image_templates:
#       - "goreleaser/goreleaser:{{ .Tag }}-arm64"
#       - "ghcr.io/goreleaser/goreleaser:{{ .Tag }}-arm64"
#     dockerfile: Dockerfile
#     use: buildx
#     build_flag_templates:
#       - "--pull"
#       - "--label=io.artifacthub.package.readme-url=https://raw.githubusercontent.com/OpenIMSDK/Open-IM-Server/main/README.md"
#       - "--label=io.artifacthub.package.logo-url=hhttps://github.com/OpenIMSDK/Open-IM-Server/blob/main/assets/logo/openim-logo-green.png"
#       - '--label=io.artifacthub.package.maintainers=[{"name":"Xinwei Xiong","email":"3293172751nss@gmail.com"}]'
#       - "--label=io.artifacthub.package.license=Apace-2.0"
#       - "--label=org.opencontainers.image.description=OpenIM Open source top instant messaging system"
#       - "--label=org.opencontainers.image.created={{.Date}}"
#       - "--label=org.opencontainers.image.name={{.ProjectName}}"
#       - "--label=org.opencontainers.image.revision={{.FullCommit}}"
#       - "--label=org.opencontainers.image.version={{.Version}}"
#       - "--label=org.opencontainers.image.source={{.GitURL}}"
#       - "--platform=linux/arm64"
#     goarch: arm64
#     extra_files:
#       - scripts/entrypoint.sh

# docker_manifests:
#   - name_template: "goreleaser/goreleaser:{{ .Tag }}"
#     image_templates:
#       - "goreleaser/goreleaser:{{ .Tag }}-amd64"
#       - "goreleaser/goreleaser:{{ .Tag }}-arm64"
#   - name_template: "ghcr.io/goreleaser/goreleaser:{{ .Tag }}"
#     image_templates:
#       - "ghcr.io/goreleaser/goreleaser:{{ .Tag }}-amd64"
#       - "ghcr.io/goreleaser/goreleaser:{{ .Tag }}-arm64"
#   - name_template: "goreleaser/goreleaser:latest"
#     image_templates:
#       - "goreleaser/goreleaser:{{ .Tag }}-amd64"
#       - "goreleaser/goreleaser:{{ .Tag }}-arm64"
#   - name_template: "ghcr.io/goreleaser/goreleaser:latest"
#     image_templates:
#       - "ghcr.io/goreleaser/goreleaser:{{ .Tag }}-amd64"
#       - "ghcr.io/goreleaser/goreleaser:{{ .Tag }}-arm64"

nfpms:
  - id: packages
    builds:
      - openim-api
      - openim-cmdutils
      - openim-crontask
      - openim-msggateway
      - openim-msgtransfer
      - openim-push
      - openim-rpc-auth
      - openim-rpc-conversation
      - openim-rpc-friend
      - openim-rpc-group
      - openim-rpc-msg
      - openim-rpc-third
      - openim-rpc-user
    # Your app's vendor.
    vendor: OpenIMSDK
    homepage: https://github.com/OpenIMSDK/Open-IM-Server
    maintainer: kubbot <https://github.com/kubbot>
    description: |-
      Auto sync github labels
      kubbot && openimbot
    license: MIT
    formats:
      - apk
      - deb
      - rpm
      - termux.deb # Since: v1.11
      - archlinux # Since: v1.13
    dependencies:
      - git
    recommends:
      - golang


# The lines beneath this are called `modelines`. See `:help modeline`
# Feel free to remove those if you don't want/use them.
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
# vim: set ts=2 sw=2 tw=0 fo=cnqoj

# Default: './dist'
dist: ./_output/dist

# .goreleaser.yaml
milestones:
  # You can have multiple milestone configs
  -
    # Repository for the milestone
    # Default is extracted from the origin remote URL
    repo:
      owner: OpenIMSDK
      name: Open-IM-Server

    # Whether to close the milestone
    close: true

    # Fail release on errors, such as missing milestone.
    fail_on_error: false

    # Name of the milestone
    #
    # Default: '{{ .Tag }}'
    name_template: "Current Release"

# publishers:
#   - name: "fury.io"
#     ids:
#       - packages
#     dir: "{{ dir .ArtifactPath }}"
#     cmd: |
#       bash -c '
#       if [[ "{{ .Tag }}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
#         curl -F package=@{{ .ArtifactName }} https://{{ .Env.FURY_TOKEN }}@push.fury.io/{{ .Env.USERNAME }}/
#       else
#         echo "Skipping deployment: Non-production release detected"
#       fi'

checksum:
  name_template: "{{ .ProjectName }}_checksums.txt"
  algorithm: sha256

release:

  prerelease: auto
  
  footer: |
  
    ## Welcome to the {{ .Tag }} release of [chat](https://github.com/OpenIMSDK/chat)!🎉🎉!

    **Full Changelog**: https://github.com/OpenIMSDK/Open-IM-Server/compare/{{ .PreviousTag }}...{{ .Tag }}

    ## Helping out

    + We release logs are recorded on [✨CHANGELOG](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/CHANGELOG/CHANGELOG.md)

    + For information on versions of OpenIM and how to maintain branches, read [📚this article](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/conversions/version.md)

    + If you wish to use mirroring, read OpenIM's [image management policy](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/docs/conversions/images.md)

    **Want to be one of them 😘?**

    <p align="center">
        <a href="https://github.com/kubbot" style="float: left; margin-right: 10px;">
            <img src="https://github.com/openimbot/openimbot/blob/main/assets/icon/blue%E9%80%8F%E6%98%8E.png" width="50" height="50" />
        </a>
        <a href="https://www.openim.online">
            <img src="https://github.com/OpenIMSDK/Open-IM-Server/blob/main/assets/logo/openim-logo.png" />
        </a>
        <a href="https://github.com/openimbot" style="float: right; margin-left: 10px;">
            <img src="https://github.com/openimbot/openimbot/blob/main/assets/icon/red%E9%80%8F%E6%98%8E.png" width="50" height="50" />
        </a>
    </p>

    > **Note**
    > @openimbot and @kubbot have made great contributions to the community as community 🤖robots(@openimsdk/bot), respectively.
    > Thanks to the @openimsdk/openim team for all their hard work on this release.
    > Thank you to all the [💕developers and contributors](https://github.com/OpenIMSDK/Open-IM-Server/graphs/contributors), people from all over the world, OpenIM brings us together
    > Contributions to this project are welcome! Please see [CONTRIBUTING.md](https://github.com/OpenIMSDK/Open-IM-Server/blob/main/CONTRIBUTING.md) for details.

    ## Get Involved with OpenIM!

    **Here are some ways to get involved with the OpenIM community:**

    📢 **Slack Channel**: Join our Slack channels for discussions, communication, and support. Click [here](https://join.slack.com/t/openimsdk/shared_invite/zt-1tmoj26uf-_FDy3dowVHBiGvLk9e5Xkg) to join the Open-IM-Server Slack team channel.

    📧 **Gmail Contact**: If you have any questions, suggestions, or feedback for our open-source projects, please feel free to [contact us via email](https://mail.google.com/mail/?view=cm&fs=1&tf=1&to=winxu81@gmail.com).

    📖 **Blog**: Stay up-to-date with OpenIM-Server projects and trends by reading our [blog](https://doc.rentsoft.cn/). We share the latest developments, tech trends, and other interesting information related to OpenIM.

    📱 **WeChat**: Add us on WeChat (QR Code) and indicate that you are a user or developer of Open-IM-Server. We'll process your request as soon as possible.

    Remember, your contributions play a vital role in making OpenIM successful, and we look forward to your active participation in our community! 🙌