Squashed 'nginx/' content from commit 297b09646

git-subtree-dir: nginx
git-subtree-split: 297b0964644ee242fef1bf8e2af0587520072309
This commit is contained in:
Ava Apples Affine 2026-04-30 00:59:20 +00:00
commit 484a904fa7
528 changed files with 294288 additions and 0 deletions

15
.github/DISCUSSION_TEMPLATE/general.yml vendored Normal file
View file

@ -0,0 +1,15 @@
---
body:
- type: markdown
attributes:
value: |
For NGINX troubleshooting/technical help, please visit our community forum instead of asking your questions here. We will politely redirect these types of questions to the forum.
- type: textarea
id: general
attributes:
label: What would you like to discuss?
description: Please provide as much context as possible. Remember that only general discussions related to the NGINX codebase will be addressed on GitHub. For anything else, please visit our [community forum](https://community.nginx.org/).
value: |
I would like to discuss...
validations:
required: true

15
.github/DISCUSSION_TEMPLATE/ideas.yml vendored Normal file
View file

@ -0,0 +1,15 @@
---
body:
- type: markdown
attributes:
value: |
For NGINX troubleshooting/technical help, please visit our community forum instead of asking your questions here. We will politely redirect these types of questions to the forum.
- type: textarea
id: ideas
attributes:
label: What idea would you like to discuss?
description: Please provide as much context as possible. Remember that only ideas related to the NGINX codebase will be addressed on GitHub. For anything else, please visit our [community forum](https://community.nginx.org/).
value: |
I have an idea for...
validations:
required: true

15
.github/DISCUSSION_TEMPLATE/q-a.yml vendored Normal file
View file

@ -0,0 +1,15 @@
---
body:
- type: markdown
attributes:
value: |
For NGINX troubleshooting/technical help, please visit our community forum instead of asking your questions here. We will politely redirect these types of questions to the forum.
- type: textarea
id: q-a
attributes:
label: What question do you have?
description: Please provide as much context as possible. Remember that only questions related to the NGINX codebase will be addressed on GitHub. For anything else, please visit our [community forum](https://community.nginx.org/).
value: |
I would like to know...
validations:
required: true

106
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View file

@ -0,0 +1,106 @@
---
name: 🐛 Bug report
description: Create a report to help us improve
labels: bug
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this bug report!
Before you continue filling out this report, please take a moment to check that your bug has not been [already reported on GitHub][issue search], is reproducible with the latest version of nginx, and does not involve any third-party modules 🙌
Remember to redact any sensitive information such as authentication credentials and/or license keys!
**Note:** If you are seeking community support, please start a new topic in the [NGINX Community forum][forum]. If you wish to discuss the codebase, please start a new thread via [GitHub discussions][discussions].
[issue search]: https://github.com/nginx/nginx/search?q=is%3Aissue&type=issues
[discussions]: https://github.com/nginx/nginx/discussions
[forum]: https://community.nginx.org
- type: textarea
id: overview
attributes:
label: Bug Overview
description: A clear and concise overview of the bug.
placeholder: When I do "X", "Y" happens instead of "Z".
validations:
required: true
- type: textarea
id: behavior
attributes:
label: Expected Behavior
description: A clear and concise description of what you expected to happen.
placeholder: When I do "X", I expect "Z" to happen.
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to Reproduce the Bug
description: Detail the series of steps required to reproduce the bug.
placeholder: When I run "X" using [...], "X" fails with "Y" error message. If I check the terminal outputs and/or logs, I see the following info.
validations:
required: true
- type: textarea
id: configuration
attributes:
label: NGINX Configuration
description: Please provide your NGINX configuration. Minimize it to the smallest possible configuration that reproduces the issue.
value: |
```
# Your NGINX configuration
```
validations:
required: true
- type: textarea
id: version
attributes:
label: NGINX version and build configuration options
description: Please provide details about your NGINX build.
value: |
The output of `nginx -V`: [...]
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment where NGINX is being built and/or deployed
description: Please provide details about your environment.
value: |
- Target deployment platform: [e.g. AWS/GCP/local cluster/etc...]
- Target OS: [e.g. RHEL 9/Ubuntu 24.04/etc...]
validations:
required: true
- type: textarea
id: architecture
attributes:
label: Architecture where NGINX is being built and/or deployed
description: Please provide details about your deployment environment.
value: |
The output of `uname -a`: [...]
validations:
required: true
- type: textarea
id: logs
attributes:
label: NGINX Debug Log
description: Please provide your NGINX debug log. See this [doc](http://nginx.org/en/docs/debugging_log.html) for details on how to enable it.
value: |
```
# Your NGINX debug log
```
- type: textarea
id: context
attributes:
label: Additional Context
description: Add any other context about the problem here.
placeholder: Feel free to add any other context/information/screenshots/etc... that you think might be relevant to this issue in here.

12
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,12 @@
---
blank_issues_enabled: false
contact_links:
- name: 💬 Talk to the NGINX community!
url: https://community.nginx.org
about: A community forum for NGINX users, developers, and contributors
- name: 📝 Code of Conduct
url: https://www.contributor-covenant.org/version/2/1/code_of_conduct
about: NGINX follows the Contributor Covenant Code of Conduct to ensure a safe and inclusive community
- name: 💼 For commercial & enterprise users
url: https://www.f5.com/products/nginx
about: F5 offers a wide range of NGINX products for commercial & enterprise users

View file

@ -0,0 +1,40 @@
---
name: ✨ Feature request
description: Suggest an idea for this project
labels: enhancement
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this feature request!
Before you continue filling out this request, please take a moment to check that your feature has not been [already requested on GitHub][issue search] 🙌
**Note:** If you are seeking community support, please start a new topic in the [NGINX Community forum][forum]. If you wish to discuss the codebase, please start a new thread via [GitHub discussions][discussions].
[issue search]: https://github.com/nginx/nginx/search?q=is%3Aissue&type=issues
[discussions]: https://github.com/nginx/nginx/discussions
[forum]: https://community.nginx.org
- type: textarea
id: overview
attributes:
label: Feature Overview
description: A clear and concise description of what the feature request is.
placeholder: I would like this project to be able to do "X".
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives Considered
description: Detail any potential alternative solutions/workarounds you've used or considered.
placeholder: I have done/might be able to do "X" in this project by doing "Y".
- type: textarea
id: context
attributes:
label: Additional Context
description: Add any other context about the problem here.
placeholder: Feel free to add any other context/information/screenshots/etc... that you think might be relevant to this feature request here.

36
.github/pull_request_template.md vendored Normal file
View file

@ -0,0 +1,36 @@
## Problem
Briefly describe the issue or feature being addressed.
## Solution
Explain your approach and any important design decisions.
## Testing
Describe how you tested the change (manual testing, automated tests,
regression tests, etc.).
- [ ] Manual Testing
- [ ] Functional Testing ([nginx-tests](https://github.com/nginx/nginx-tests))
**Closes:** #ISSUE\_NUMBER
## Checklist
Before submitting this PR, please confirm:
- [ ] I have read the [CONTRIBUTING](https://github.com/nginx/nginx/blob/master/CONTRIBUTING.md) guidelines
- [ ] I have added tests (if applicable) to validate my changes
- [ ] All existing tests pass
- [ ] I have updated documentation where necessary
- [ ] My branch is rebased on the latest master
- [ ] This PR targets the master branch from my fork
- [ ] My commit message follows NGINX standards (imperative mood, clear
subject, references related issue if applicable, and contains only
relevant changes)
## Release Notes
If this change affects users, please add a short note here describing
the impact for release documentation.

103
.github/scripts/commit-msg-check.pl vendored Executable file
View file

@ -0,0 +1,103 @@
#!/usr/bin/env perl
# Copyright (C) Nginx, Inc.
#
# Takes input in the form
#
# git show -s --format=%B <hash>
#
use strict;
use warnings;
my $E = "❌ ";
# 72 characters is a natural choice. It provides 4 characters of
# left/right margin on a standard 80 character wide terminal in
# git-log(1) etc standard output.
#
# vim(1) (from 7.2) ships with Tim Pope's vim-git ftplugin which
# amongst other things autowraps lines when editing commit messages
# after 72 characters.
my $LINE_LENGTH_LIMIT = 72;
my $subject = <>;
my $body;
while (<>) {
$body .= $_;
}
sub chk_sub_length {
if (length($subject) > $LINE_LENGTH_LIMIT) {
print $E . "Subject is longer than " . $LINE_LENGTH_LIMIT .
" characters\n";
}
}
sub chk_sub_prefix_cap {
my $excemptions = qr/gRPC: /;
if ($subject =~ /^[a-z][a-zA-Z_-]*: /) {
if ($subject =~ /^((?!$excemptions).)*$/) {
print $E . "Subject prefix should be capitalised\n";
}
}
if ($subject =~ /^[a-zA-Z_-]*: [A-Z]/) {
print $E . "First word after the prefix should be lower case\n";
}
}
sub chk_body_blank_line {
if (($body =~ /^(.*)/)[0]) {
print $E . "Commit message body should be separated from the subject by a blank line\n";
}
}
sub chk_body_trailers {
my $prev_line = "";
foreach (split(/\n/, $body)) {
if (/^[a-zA-Z-]*: /) {
if ($prev_line ne "") {
print $E . "Commit tags/trailers should be separated from the commit message body by a blank line\n";
}
last;
}
$prev_line = $_;
}
}
sub chk_body_line_length {
foreach (split(/\n/, $body)) {
# Ignore indented lines for command/log output etc and URLs.
if (/^[ \t]/ || /https?:\/\// || /ftp:\/\//) {
next;
}
# Stop after hitting commit tags/trailers
if (/^[a-zA-Z-]*: /) {
last;
}
if (length($_) <= $LINE_LENGTH_LIMIT) {
next;
}
print $E . "One or more body lines exceed " . $LINE_LENGTH_LIMIT . " characters. (Indent command/log output etc lines to quell this error)\n";
last;
}
}
chomp($subject);
chk_sub_length();
chk_sub_prefix_cap();
chk_body_blank_line();
chk_body_trailers();
chk_body_line_length();

11
.github/workflows/buildbot.yml vendored Normal file
View file

@ -0,0 +1,11 @@
name: buildbot
on:
push:
branches:
- master
- 'stable-1.*'
jobs:
buildbot:
uses: nginx/ci-self-hosted/.github/workflows/nginx-buildbot.yml@main

View file

@ -0,0 +1,38 @@
name: Check Commit Message(s)
# Get the repository with all commits to ensure that we can
# analyze all of the commits contributed via the Pull Request.
on:
pull_request:
types: [ opened, synchronize ]
jobs:
check-commit-messages:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- name: check-commits.sh
run: |
echo "## Commit Message Linter Results" >${GITHUB_STEP_SUMMARY}
err=0
while read hash subj
do
echo "Checking: ${hash} (\"${subj}\")" | tee -a ${GITHUB_STEP_SUMMARY}
out=$(git show -s --format=%B ${hash} | .github/scripts/commit-msg-check.pl)
if test -n "${out}"
then
echo "${out}" | tee -a ${GITHUB_STEP_SUMMARY}
err=1
else
echo "✅ ok" | tee -a ${GITHUB_STEP_SUMMARY}
fi
done <<< $(git rev-list --oneline ${{github.event.pull_request.base.sha}}..${{github.event.pull_request.head.sha}})
if test ${err} -ne 0
then
exit 2
fi

8
.github/workflows/check-pr.yml vendored Normal file
View file

@ -0,0 +1,8 @@
name: check-pr
on:
pull_request:
jobs:
check-pr:
uses: nginx/ci-self-hosted/.github/workflows/nginx-check-pr.yml@main

View file

@ -0,0 +1,23 @@
name: Check Version Bump
on:
pull_request:
types: [ opened, synchronize ]
jobs:
check-version-bump:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- name: Check git log
run: |
echo "## Check for 'Version bump' commit" >${GITHUB_STEP_SUMMARY}
subj=$(git log --format=%s $(git describe --abbrev=0 --tags).. | tail -1)
if ! expr "$subj" : 'Version bump' >/dev/null
then
echo "❌ No 'Version bump' commit immediately after release tag" | tee -a ${GITHUB_STEP_SUMMARY}
exit 2
fi

49
.github/workflows/check-whitespace.yaml vendored Normal file
View file

@ -0,0 +1,49 @@
name: Check Whitespace
# Process `git log --check` output to extract just the check errors.
on:
pull_request:
types: [ opened, synchronize ]
jobs:
check-whitespace:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- name: git log --check
run: |
echo "## Whitespace Check Results" >${GITHUB_STEP_SUMMARY}
err=0
commit=
while read dash hash subj
do
case "${dash}" in
"---")
err=0
commit="${hash} (\"${subj}\")"
;;
"")
;;
*)
if test -n "${commit}"
then
echo "" | tee -a ${GITHUB_STEP_SUMMARY}
echo "--- ${commit}" | tee -a ${GITHUB_STEP_SUMMARY}
fi
err=1
commit=
# Ignore the variable names, this is actually the output from
# git-log --check
echo "${dash} ${hash} ${subj}" | tee -a ${GITHUB_STEP_SUMMARY}
;;
esac
done <<< $(git log --check --pretty=format:"--- %h %s" ${{github.event.pull_request.base.sha}}..)
if test ${err} -ne 0
then
exit 2
fi

77
.github/workflows/f5_cla.yml vendored Normal file
View file

@ -0,0 +1,77 @@
---
name: F5 Contributor License Agreement (CLA)
on:
issue_comment:
types: [created]
pull_request_target:
types: [opened, synchronize, closed, labeled, unlabeled]
permissions: read-all
jobs:
f5-cla:
name: F5 Contributor License Agreement (CLA)
runs-on: ubuntu-24.04
permissions:
actions: write
contents: read
pull-requests: write
statuses: write
steps:
- name: Check if F5 CLA should be skipped
id: skip-cla
if: |
(github.repository == 'nginx/nginx' || github.repository == 'nginx/nginx-tests' || github.repository == 'nginx/nginx.org') &&
(contains(toJSON(github.event.pull_request.labels.*.name), '"skip-cla"') ||
contains(toJSON(github.event.issue.labels.*.name), '"skip-cla"'))
run: echo "skip=true" >> "$GITHUB_OUTPUT"
- name: Run F5 CLA assistant
if: |
steps.skip-cla.outputs.skip != 'true' &&
(github.event_name == 'pull_request_target' ||
github.event.comment.body == 'recheck' ||
github.event.comment.body == 'I have hereby read the F5 CLA and agree to its terms')
uses: contributor-assistant/github-action@ca4a40a7d1004f18d9960b404b97e5f30a505a08 # v2.6.1
with:
# Path to the CLA document.
path-to-document: https://github.com/f5/f5-cla/blob/main/docs/f5_cla.md
# Custom CLA messages.
custom-notsigned-prcomment: '🎉 Thank you for your contribution! It appears you have not yet signed the [F5 Contributor License Agreement (CLA)](https://github.com/f5/f5-cla/blob/main/docs/f5_cla.md), which is required for your changes to be incorporated into an F5 Open Source Software (OSS) project. Please kindly read the [F5 CLA](https://github.com/f5/f5-cla/blob/main/docs/f5_cla.md) and reply on a new comment with the following text to agree:'
custom-pr-sign-comment: 'I have hereby read the F5 CLA and agree to its terms'
custom-allsigned-prcomment: '✅ All required contributors have signed the F5 CLA for this PR. Thank you!'
# Remote repository storing CLA signatures.
remote-organization-name: f5
remote-repository-name: f5-cla-data
# Branch where CLA signatures are stored.
branch: main
path-to-signatures: signatures/signatures.json
# Comma separated list of usernames for maintainers or any other individuals who should not be prompted for a CLA.
# NOTE: You will want to edit the usernames to suit your project needs.
allowlist: Copilot,dependabot[bot],renovate[bot],nginx-bot
# Do not lock PRs after a merge.
lock-pullrequest-aftermerge: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PERSONAL_ACCESS_TOKEN: ${{ secrets.F5_CLA_TOKEN }}
- name: Leave a note in the PR if the F5 CLA is not required
if: |
steps.skip-cla.outputs.skip == 'true' &&
(github.event.action == 'labeled' || github.event.action == 'opened')
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const number = context.payload.pull_request?.number || context.payload.issue?.number;
if (!number) return;
const body = '✅ The F5 CLA is not required for this PR.\n<sub>Posted by the **CLA Assistant Lite bot**.</sub>';
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: number,
});
if (comments.some(c => c.body === body)) return;
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: number,
body,
});

View file

@ -0,0 +1,27 @@
name: Mark Stale Issues/Pull-Requests
on:
schedule:
- cron: '22 2 * * *' # Run every day at 02:22
env:
STALE_DAYS: 90
jobs:
mark_stale_issues_prs:
runs-on: ubuntu-24.04
permissions:
actions: write
issues: write
pull-requests: write
name: Mark stale issues/pull-requests
steps:
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10
with:
stale-pr-message: "This pull-request has been automatically marked 'stale' because it has been inactive for **${{ env.STALE_DAYS }}** days."
stale-issue-message: "This issue has been automatically marked 'stale' because it has been inactive for **${{ env.STALE_DAYS }}** days."
days-before-stale: ${{ env.STALE_DAYS }}
days-before-close: -1
stale-pr-label: stale
stale-issue-label: stale

View file

@ -0,0 +1,32 @@
name: New Issue Welcome
on:
issues:
types: [opened]
jobs:
new-issue-welcome:
runs-on: ubuntu-24.04
permissions:
issues: write
steps:
- name: Comment on new issue
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const issueNumber = context.issue.number;
const username = context.payload.issue.user.login;
const comment = [
`👋 Thanks for opening this issue and contributing to the NGINX project!`,
`A maintainer will review it and follow up when possible. We appreciate your support.`
].join('\n');
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issueNumber,
body: comment
});