# 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 AnyGlobToAllFiles ones are added if all the
# files fit into the category, and the AnyGlobToAnyFile 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).

appleOS:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - '.github/workflows/macos.yml'
      - 'lib/config-mac.h'
      - 'lib/macos*'
      - 'lib/vtls/sectransp*'
      - 'm4/curl-sectransp.m4'
      - 'MacOSX-Framework'

authentication:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - '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/**'
      - 'tests/server/fake_ntlm.c'

build:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - '**/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/**'
      - 'MacOSX-Framework'
      - 'Makefile.*'
      - 'packages/**'
      - 'plan9/**'
      - 'projects/**'
      - 'winbuild/**'
      - 'libcurl.def'

CI:
- all:
  - changed-files:
    - AnyGlobToAnyFile:
      - '.azure-pipelines.yml'
      - '.circleci/**'
      - '.cirrus.yml'
      - '.github/**'
      - 'appveyor.yml'
      - 'scripts/ci*'
      - 'tests/azure.pm'
      - 'tests/appveyor.pm'
      - 'tests/CI.md'

cmake:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - '**/CMakeLists.txt'
      - 'CMake/**'
      - 'docs/INSTALL.cmake'
      - 'lib/curl_config.h.cmake'

cmdline tool:
- all:
  - changed-files:
    - AnyGlobToAnyFile:
      - 'docs/cmdline-opts/**'
      - 'src/**'

connecting & proxies:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'docs/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:
    - AnyGlobToAllFiles:
      - 'docs/HTTP-COOKIES.md'
      - 'docs/cmdline-opts/cookie*'
      - 'docs/cmdline-opts/junk-session-cookies.d'
      - 'docs/libcurl/opts/CURLINFO_COOKIE*'
      - 'docs/libcurl/opts/CURLOPT_COOKIE*'
      - 'docs/examples/cookie_interface.c'
      - 'lib/cookie.*'
      - 'lib/psl.*'

cryptography:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'docs/CIPHERS.md'
      - 'docs/RUSTLS.md'
      - 'docs/libcurl/opts/CURLOPT_EGDSOCKET*'
      - 'lib/*sha256*'
      - 'lib/curl_des.*'
      - 'lib/curl_hmac.*'
      - 'lib/curl_md?.*'
      - 'lib/md?.*'
      - 'lib/rand.*'

DICT:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'lib/dict.*'
      - 'tests/dictserver.py'

documentation:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - '**/*.md'
      - '**/*.txt'
      - '**/*.1'
      - '**/*.3'
      - 'CHANGES'
      - 'docs/**'
      - 'GIT-INFO'
      - 'LICENSES/**'
      - 'README'
      - 'RELEASE-NOTES'
    - AllGlobsToAllFiles:
        # negative matches
      - '!**/CMakeLists.txt'
      - '!**/Makefile.am'

FTP:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - '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:
    - AnyGlobToAllFiles:
      - 'lib/gopher*'

HTTP:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'docs/examples/hsts*'
      - 'docs/examples/http-*'
      - 'docs/examples/httpput*'
      - 'docs/examples/https*'
      - 'docs/examples/*post*'
      - 'docs/HSTS.md'
      - '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/http*'
      - 'tests/http*'
      - 'tests/http-server.pl'
      - 'tests/http/*'
      - 'tests/nghttp*'

HTTP/2:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'CMake/FindNGHTTP2.cmake'
      - 'CMake/FindQUICHE.cmake'
      - 'docs/HTTP2.md'
      - 'docs/libcurl/opts/CURLOPT_STREAM*'
      - 'docs/examples/http2*'
      - 'lib/http2*'
      - 'tests/http2-server.pl'

HTTP/3:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - '.github/workflows/ngtcp2*'
      - '.github/workflows/quiche*'
      - '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:
    - AnyGlobToAllFiles:
      - 'docs/HYPER.md'
      - 'lib/c-hyper.*'

IMAP:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'lib/imap*'
      - 'docs/examples/imap*'

LDAP:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'lib/*ldap*'

libcurl API:
- all:
  - changed-files:
    - AnyGlobToAnyFile:
      - 'docs/libcurl/ABI.md'
      - 'docs/libcurl/curl_*.3'
      - 'include/curl/**'

logging:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'docs/cmdline-opts/trace*'
      - 'docs/libcurl/curl_global_trace*'
      - 'lib/curl_trc*'
      - 'tests/http/test_15_tracing.py'

MIME:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - '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:
    - AnyGlobToAllFiles:
      - 'docs/MQTT.md'
      - 'lib/mqtt*'
      - 'tests/server/mqttd.c'

name lookup:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - '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:
    - AnyGlobToAllFiles:
      - 'docs/examples/pop3*'
      - 'lib/pop3.*'

RTMP:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'lib/curl_rtmp.*'

RTSP:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'docs/libcurl/opts/CURLINFO_RTSP*'
      - 'docs/libcurl/opts/CURLOPT_RTSP*'
      - 'lib/rtsp.*'
      - 'tests/rtspserver.pl'
      - 'tests/server/rtspd.c'

SCP/SFTP:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'CMake/FindLibSSH2.cmake'
      - 'docs/libcurl/opts/CURLOPT_SSH*'
      - 'docs/examples/sftp*'
      - 'lib/vssh/**'
      - 'tests/sshhelp.pm'
      - 'tests/sshserver.pl'

script:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - '**/*.pl'
      - '**/*.sh'
      - 'curl-config.in'
      - 'docs/curl-config.1'
      - 'docs/mk-ca-bundle.1'
      - 'docs/THANKS-filter'
      - 'scripts/**'

SMB:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'lib/smb.*'
      - 'tests/smbserver.py'

SMTP:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'docs/examples/smtp-*'
      - 'docs/libcurl/opts/CURLOPT_MAIL*'
      - 'lib/smtp.*'

tests:
- all:
  - changed-files:
    - AnyGlobToAnyFile:
      - 'tests/**'

TFTP:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'lib/tftp.*'
      - 'tests/tftpserver.pl'
      - 'tests/server/tftp*'

TLS:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'CMake/FindBearSSL.cmake'
      - 'CMake/FindMbedTLS.cmake'
      - 'CMake/FindWolfSSL.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:
    - AnyGlobToAllFiles:
      - 'docs/libcurl/curl_url*'
      - 'docs/URL-SYNTAX.md'
      - 'docs/examples/parseurl*'
      - 'include/curl/urlapi.h'
      - 'lib/urlapi*'

WebSocket:
- all:
  - changed-files:
    - AnyGlobToAllFiles:
      - 'docs/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:
    - AnyGlobToAllFiles:
      - '**/Makefile.mk'
      - 'appveyor.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/**'
      - 'libcurl.def'
