# Copyright (C) Daniel Fandrich, <dan@coneharvesters.com>, et al.
#
# SPDX-License-Identifier: curl

# The workflow configures the .github/workflows/label.yml action
# to add labels to pull requests. This is not (yet?) a replacement for human
# triaging, but is intended to add labels to the easy cases. If the matching
# language becomes more powerful, more cases should be able to be handled.
#
# Labels are added in two ways: the any-glob-to-all-files ones are added if all
# the files fit into the category, and the any-glob-to-any-file ones are added
# as long as any file matches. The first ones are for "major" categories (the
# PR is all about that one topic, like HTTP/3), while the second ones are
# "addendums" that give useful information about a PR that's really mostly
# something else (e.g. CI if the PR also touches CI jobs).
#
# N.B. any-glob-to-all-files is misnamed; it acts like one-glob-to-all-files.
# Therefore, to get any-glob-to-all-files semantics with multiple matching
# patterns, they must be joined with commas to a single string surrounded by
# braces. For example: '{lib/**,src/**}'.
#
# See https://github.com/actions/labeler/ for documentation on this file.
---

appleOS:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              .github/workflows/macos.yml,\
              lib/config-mac.h,\
              lib/macos*,\
              lib/vtls/sectransp*,\
              m4/curl-sectransp.m4\
              }"

authentication:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/mk-ca-bundle.1,\
              docs/libcurl/opts/CURLINFO_HTTPAUTH*,\
              docs/libcurl/opts/CURLINFO_PROXYAUTH*,\
              docs/libcurl/opts/CURLOPT_KRB*,\
              docs/libcurl/opts/CURLOPT_SASL*,\
              docs/libcurl/opts/CURLOPT_SERVICE_NAME*,\
              docs/libcurl/opts/CURLOPT_USERNAME*,\
              docs/libcurl/opts/CURLOPT_USERPWD*,\
              docs/libcurl/opts/CURLOPT_XOAUTH*,\
              lib/*gssapi*,\
              lib/*krb5*,\
              lib/*ntlm*,\
              lib/curl_sasl.*,\
              lib/http_aws*,\
              lib/http_digest.*,\
              lib/http_negotiate.*,\
              lib/vauth/**\
              }"

build:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              **/CMakeLists.txt,\
              **/Makefile.am,\
              **/Makefile.inc,\
              **/Makefile.mk,\
              **/*.m4,\
              **/*.mk,\
              *.m4,\
              docs/INSTALL.cmake,\
              lib/curl_config.h.cmake,\
              lib/libcurl*.in,\
              CMake/**,\
              CMakeLists.txt,\
              configure.ac,\
              m4/**,\
              Makefile.*,\
              packages/**,\
              plan9/**,\
              projects/**,\
              winbuild/**,\
              lib/libcurl.def\
              }"

CI:
  - all:
      - changed-files:
          - any-glob-to-any-file:
              - '.circleci/**'
              - '.github/**'
              - 'appveyor.*'
              - 'scripts/ci*'
              - 'tests/azure.pm'
              - 'tests/appveyor.pm'
              - 'tests/CI.md'

cmake:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              **/CMakeLists.txt,\
              CMake/**,\
              docs/INSTALL.cmake,\
              lib/curl_config.h.cmake\
              }"

cmdline tool:
  - all:
      - changed-files:
          - any-glob-to-any-file:
              - 'docs/cmdline-opts/**'
              - 'src/**'

connecting & proxies:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/internals/CONNECTION-FILTERS.md,\
              docs/examples/ipv6.c,\
              docs/libcurl/opts/CURLINFO_CONNECT*,\
              docs/libcurl/opts/CURLINFO_PROXY*,\
              docs/libcurl/opts/CURLOPT_ADDRESS*,\
              docs/libcurl/opts/CURLOPT_CONNECT*,\
              docs/libcurl/opts/CURLOPT_HAPROXY*,\
              docs/libcurl/opts/CURLOPT_OPENSOCKET*,\
              docs/libcurl/opts/CURLOPT_PRE_PROXY*,\
              docs/libcurl/opts/CURLOPT_PROXY*,\
              docs/libcurl/opts/CURLOPT_SOCKOPT*,\
              docs/libcurl/opts/CURLOPT_SOCKS*,\
              docs/libcurl/opts/CURLOPT_TCP*,\
              docs/libcurl/opts/CURLOPT_TIMEOUT*,\
              lib/cf-*proxy.*,\
              lib/cf-socket.*,\
              lib/cfilters.*,\
              lib/conncache.*,\
              lib/connect.*,\
              lib/http_proxy.*,\
              lib/if2ip.*,\
              lib/noproxy.*,\
              lib/socks.*,\
              tests/server/socksd.c\
              }"

cookies:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/HTTP-COOKIES.md,\
              docs/cmdline-opts/cookie*,\
              docs/cmdline-opts/junk-session-cookies.md,\
              docs/libcurl/opts/CURLINFO_COOKIE*,\
              docs/libcurl/opts/CURLOPT_COOKIE*,\
              docs/examples/cookie_interface.c,\
              lib/cookie.*,\
              lib/psl.*\
              }"

cryptography:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/CIPHERS.md,\
              docs/RUSTLS.md,\
              docs/libcurl/opts/CURLOPT_EGDSOCKET*,\
              lib/*sha256*,\
              lib/*sha512*,\
              lib/curl_des.*,\
              lib/curl_hmac.*,\
              lib/curl_md?.*,\
              lib/md?.*,\
              lib/rand.*\
              }"

DICT:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              lib/dict.*,\
              tests/dictserver.py\
              }"

documentation:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              .github/workflows/checkdocs.yml,\
              .github/scripts/badwords.*,\
              .github/scripts/cd2cd,\
              .github/scripts/cd2nroff,\
              .github/scripts/cdall.pl,\
              .github/scripts/nroff2cd,\
              .github/scripts/verify-examples.pl,\
              .github/scripts/verify-synopsis.pl,\
              **/*.md,\
              **/*.txt,\
              **/*.1,\
              CHANGES.md,\
              docs/**,\
              LICENSES/**,\
              README,\
              RELEASE-NOTES,\
              scripts/cd*\
              }"
          - all-globs-to-all-files:
              # negative matches
              - '!**/CMakeLists.txt'
              - '!**/Makefile.am'

FTP:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/libcurl/opts/CURLINFO_FTP*,\
              docs/libcurl/opts/CURLOPT_FTP*,\
              docs/libcurl/opts/CURLOPT_WILDCARDMATCH*,\
              docs/examples/ftp*,\
              lib/curl_fnmatch.*,\
              lib/curl_range.*,\
              lib/ftp*,\
              tests/ftp*\
              }"

GOPHER:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              lib/gopher*\
              }"

HTTP:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/examples/hsts*,\
              docs/examples/http-*,\
              docs/examples/httpput*,\
              docs/examples/https*,\
              docs/examples/*post*,\
              docs/HTTP-COOKIES.md,\
              docs/libcurl/opts/CURLINFO_COOKIE*,\
              docs/libcurl/opts/CURLOPT_COOKIE*,\
              docs/libcurl/opts/CURLINFO_HTTP_**,\
              docs/libcurl/opts/CURLINFO_REDIRECT*,\
              docs/libcurl/opts/CURLINFO_REFER*,\
              docs/libcurl/opts/CURLOPT_FOLLOWLOCATION*,\
              docs/libcurl/opts/CURLOPT_HSTS*,\
              docs/libcurl/opts/CURLOPT_HTTP*,\
              docs/libcurl/opts/CURLOPT_POST.*,\
              docs/libcurl/opts/CURLOPT_POSTFIELD*,\
              docs/libcurl/opts/CURLOPT_POSTREDIR*,\
              docs/libcurl/opts/CURLOPT_REDIR*,\
              docs/libcurl/opts/CURLOPT_REFER*,\
              docs/libcurl/opts/CURLOPT_TRAILER*,\
              docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING*,\
              lib/cf-https*,\
              lib/cf-h1*,\
              lib/cf-h2*,\
              lib/cookie.*,\
              lib/hsts.*,\
              lib/http*,\
              tests/http*,\
              tests/http-server.pl,\
              tests/http/*,\
              tests/nghttp*\
              }"

HTTP/2:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              CMake/FindNGHTTP2.cmake,\
              CMake/FindQuiche.cmake,\
              docs/libcurl/opts/CURLOPT_STREAM*,\
              docs/examples/http2*,\
              lib/http2*,\
              tests/http2-server.pl\
              }"

HTTP/3:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              .github/workflows/ngtcp2*,\
              .github/workflows/quiche*,\
              .github/workflows/osslq*,\
              CMake/FindMSH3.cmake,\
              CMake/FindNGHTTP3.cmake,\
              CMake/FindNGTCP2.cmake,\
              docs/HTTP3.md,\
              docs/examples/http3*,\
              lib/vquic/**,\
              tests/http3-server.pl,\
              tests/nghttpx.conf\
              }"

Hyper:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/HYPER.md,\
              lib/c-hyper.*\
              }"

IMAP:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              lib/imap*,\
              docs/examples/imap*\
              }"

LDAP:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              lib/*ldap*\
              }"

libcurl API:
  - all:
      - changed-files:
          - any-glob-to-any-file:
              - 'docs/libcurl/ABI.md'
              - 'docs/libcurl/curl_*.md'
              - 'include/curl/**'

logging:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/cmdline-opts/trace*,\
              docs/libcurl/curl_global_trace*,\
              lib/curl_trc*,\
              tests/http/test_15_tracing.py\
              }"

MIME:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/libcurl/curl_form*,\
              docs/libcurl/curl_mime_*,\
              docs/libcurl/opts/CURLOPT_MIME*,\
              docs/libcurl/opts/CURLOPT_HTTPPOST*,\
              lib/formdata*,\
              lib/mime*,\
              src/tool_formparse.*\
              }"

MQTT:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              lib/mqtt*,\
              tests/server/mqttd.c\
              }"

name lookup:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/examples/resolve.c,\
              docs/libcurl/opts/CURLINFO_NAMELOOKUP*,\
              docs/libcurl/opts/CURLOPT_DNS*,\
              docs/libcurl/opts/CURLOPT_DOH*,\
              docs/libcurl/opts/CURLOPT_RESOLVE*,\
              lib/asyn*,\
              lib/curl_gethostname.*,\
              lib/doh*,\
              lib/host*,\
              lib/idn*,\
              lib/inet_pton.*,\
              lib/socketpair*,\
              tests/server/resolve.c\
              }"

POP3:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/examples/pop3*,\
              lib/pop3.*\
              }"

RTMP:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              lib/curl_rtmp.*\
              }"

RTSP:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/libcurl/opts/CURLINFO_RTSP*,\
              docs/libcurl/opts/CURLOPT_RTSP*,\
              lib/rtsp.*,\
              tests/rtspserver.pl,\
              tests/server/rtspd.c\
              }"

SCP/SFTP:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              CMake/FindLibssh2.cmake,\
              docs/libcurl/opts/CURLOPT_SSH*,\
              docs/examples/sftp*,\
              lib/vssh/**,\
              tests/sshhelp.pm,\
              tests/sshserver.pl\
              }"

script:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              **/*.pl,\
              **/*.sh,\
              curl-config.in,\
              docs/curl-config.1,\
              docs/mk-ca-bundle.1,\
              docs/THANKS-filter,\
              scripts/**\
              }"

SMB:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              lib/smb.*,\
              tests/smbserver.py\
              }"

SMTP:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/examples/smtp-*,\
              docs/libcurl/opts/CURLOPT_MAIL*,\
              lib/smtp.*\
              }"

tests:
  - all:
      - changed-files:
          - any-glob-to-any-file:
              - 'tests/**'

TFTP:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              lib/tftp.*,\
              tests/tftpserver.pl,\
              tests/server/tftp*\
              }"

TLS:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              CMake/FindBearSSL.cmake,\
              CMake/FindMbedTLS.cmake,\
              CMake/FindWolfSSL.cmake,\
              CMake/FindRustls.cmake,\
              docs/examples/ssl*,\
              docs/examples/*ssl.*,\
              docs/examples/*tls.*,\
              docs/SSL*,\
              docs/libcurl/curl_global_sslset*,\
              docs/libcurl/opts/CURLINFO_CA*,\
              docs/libcurl/opts/CURLINFO_CERT*,\
              docs/libcurl/opts/CURLINFO_SSL*,\
              docs/libcurl/opts/CURLINFO_TLS*,\
              docs/libcurl/opts/CURLOPT_CA*,\
              docs/libcurl/opts/CURLOPT_CERT*,\
              docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY*,\
              docs/libcurl/opts/CURLOPT_SSL*,\
              docs/libcurl/opts/CURLOPT_TLS*,\
              docs/libcurl/opts/CURLOPT_USE_SSL*,\
              lib/vtls/**,\
              m4/curl-bearssl.m4,\
              m4/curl-gnutls.m4,\
              m4/curl-mbedtls.m4,\
              m4/curl-openssl.m4,\
              m4/curl-rustls.m4,\
              m4/curl-schannel.m4,\
              m4/curl-sectransp.m4,\
              m4/curl-wolfssl.m4\
              }"

URL:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/libcurl/curl_url*,\
              docs/URL-SYNTAX.md,\
              docs/examples/parseurl*,\
              include/curl/urlapi.h,\
              lib/urlapi*\
              }"

WebSocket:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              docs/internals/WEBSOCKET.md*,\
              docs/examples/websocket*,\
              docs/libcurl/curl_ws_*,\
              docs/libcurl/libcurl-ws*,\
              docs/libcurl/opts/CURLOPT_WS_*,\
              include/curl/websockets.h,\
              lib/ws.*,\
              tests/http/clients/ws*,\
              tests/http/test_20_websockets.py,\
              tests/http/testenv/ws*\
              }"

Windows:
  - all:
      - changed-files:
          - any-glob-to-all-files: "{\
              appveyor.*,\
              .github/workflows/windows.yml,\
              CMake/Platforms/WindowsCache.cmake,\
              lib/*win32*,\
              lib/curl_multibyte.*,\
              lib/rename.*,\
              lib/vtls/schannel*,\
              m4/curl-schannel.m4,\
              projects/**,\
              src/tool_doswin.c,\
              winbuild/**,\
              lib/libcurl.def\
              }"
