Skip to content

Commit 66b49a3

Browse files
jwendellclaude
andcommitted
Add CI/CD automation and update documentation for envoy-openssl
This commit adds GitHub Actions workflows for continuous integration and automated synchronization with upstream Envoy, plus documentation updates. GitHub Actions workflows: - envoy-openssl.yml: CI pipeline for building and testing with OpenSSL - Runs on PR events only (not on push) - Uses standard Envoy build infrastructure - Includes disk cleanup step for CI environment - envoy-sync-scheduled.yaml: Automated upstream synchronization - Runs 4 times daily to merge from upstream Envoy - Creates auto-merge PRs for each release branch - Handles merge conflicts with issue creation - Auto-merges bot update PRs - envoy-openssl-auto-merge.yml: Additional merge automation - Handles bot-generated update PRs - Ensures timely integration of upstream changes Repository configuration: - Update CODEOWNERS to prevent upstream Envoy maintainers from getting review requests on envoy-openssl-specific changes - Remove .github/dependabot.yml to avoid dependency update conflicts - Update .gitignore for OpenSSL build artifacts Documentation: - Update README.md with envoy-openssl-specific build instructions - Document differences from upstream Envoy - Explain bssl-compat layer and OpenSSL requirements - Add architecture support information (s390x, ppc64le) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Jonh Wendell <jwendell@redhat.com>
1 parent 60c6cb1 commit 66b49a3

File tree

10 files changed

+411
-217
lines changed

10 files changed

+411
-217
lines changed

.github/dependabot.yml

Lines changed: 0 additions & 103 deletions
This file was deleted.
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
name: Auto-merge Bot PRs
2+
3+
on:
4+
workflow_run:
5+
workflows: ["OpenSSL testing"]
6+
types:
7+
- completed
8+
9+
permissions:
10+
pull-requests: write
11+
contents: write
12+
13+
jobs:
14+
enable-auto-merge:
15+
if: |
16+
github.repository == 'envoyproxy/envoy-openssl'
17+
&& github.event.workflow_run.conclusion == 'success'
18+
&& github.event.workflow_run.repository.full_name == github.repository
19+
runs-on: ubuntu-latest
20+
21+
steps:
22+
- name: Get PR info
23+
id: pr
24+
uses: actions/github-script@v7
25+
with:
26+
github-token: ${{ secrets.GITHUB_TOKEN }}
27+
script: |
28+
const prs = context.payload.workflow_run.pull_requests;
29+
if (prs.length === 0) {
30+
core.notice("No pull request associated with this workflow_run (likely from a fork). Skipping workflow.");
31+
// Explicitly set a flag so next steps can check
32+
core.setOutput("skip", "true");
33+
return;
34+
}
35+
const prNumber = prs[0].number;
36+
const { data: pr } = await github.rest.pulls.get({
37+
owner: context.repo.owner,
38+
repo: context.repo.repo,
39+
pull_number: prNumber
40+
});
41+
core.setOutput("pr_number", pr.number);
42+
core.setOutput("pr_author", pr.user.login);
43+
core.setOutput("labels", pr.labels.map(l => l.name).join(","));
44+
45+
- name: Print info
46+
if: ${{ steps.pr.outputs.skip != 'true' }}
47+
run: |
48+
echo "PR author: ${{ steps.pr.outputs.pr_author }}"
49+
echo "Labels: ${{ steps.pr.outputs.labels }}"
50+
if [[ "${{ steps.pr.outputs.pr_author }}" != "update-openssl-envoy[bot]" ]]; then
51+
echo "::notice title=Skip reason::PR author is not update-openssl-envoy[bot]"
52+
fi
53+
if [[ "${{ steps.pr.outputs.labels }}" != *"auto-merge"* ]]; then
54+
echo "::notice title=Skip reason::Label 'auto-merge' not found"
55+
fi
56+
57+
- name: Merge PR
58+
if: ${{ steps.pr.outputs.skip != 'true' && contains(steps.pr.outputs.labels, 'auto-merge') && steps.pr.outputs.pr_author == 'update-openssl-envoy[bot]' }}
59+
uses: actions/github-script@v7
60+
with:
61+
github-token: ${{ secrets.GITHUB_TOKEN }}
62+
script: |
63+
const prNumber = parseInt('${{ steps.pr.outputs.pr_number }}');
64+
await github.rest.pulls.merge({
65+
owner: context.repo.owner,
66+
repo: context.repo.repo,
67+
pull_number: prNumber,
68+
merge_method: 'merge'
69+
});
70+
core.notice(`✅ PR #${prNumber} merged automatically.`);
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: OpenSSL testing
2+
3+
permissions:
4+
contents: read
5+
6+
on:
7+
pull_request:
8+
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
11+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
12+
13+
14+
jobs:
15+
openssl:
16+
runs-on: ubuntu-24.04
17+
timeout-minutes: 180
18+
permissions:
19+
contents: read
20+
packages: read
21+
if: >-
22+
${{ github.repository == 'envoyproxy/envoy-openssl' }}
23+
steps:
24+
- name: Free disk space
25+
uses: envoyproxy/toolshed/gh-actions/diskspace@actions-v0.3.23
26+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
27+
- run: |
28+
./ci/run_envoy_docker.sh './ci/do_ci.sh gcc //test/...'
29+
env:
30+
BAZEL_BUILD_EXTRA_OPTIONS: >-
31+
--config=remote-envoy-engflow
32+
--config=bes-envoy-engflow
33+
--config=remote-ci
34+
ENVOY_RBE: 1
35+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
name: Sync from Upstream (Scheduled)
2+
3+
permissions:
4+
contents: read
5+
6+
on:
7+
schedule:
8+
- cron: "0 */6 * * *"
9+
workflow_dispatch:
10+
11+
concurrency:
12+
group: ${{ github.workflow }}
13+
14+
jobs:
15+
sync:
16+
if: github.repository == 'envoyproxy/envoy-openssl'
17+
runs-on: ubuntu-24.04
18+
strategy:
19+
fail-fast: false
20+
matrix:
21+
branch_name:
22+
- release/v1.32
23+
- release/v1.34
24+
- release/v1.35
25+
steps:
26+
- id: appauth
27+
uses: envoyproxy/toolshed/gh-actions/appauth@actions-v0.3.23
28+
with:
29+
key: ${{ secrets.ENVOY_CI_UPDATE_BOT_KEY }}
30+
app_id: ${{ secrets.ENVOY_CI_UPDATE_APP_ID }}
31+
32+
# Checkout the branch we're merging into
33+
- name: "Checkout ${{ github.repository }}[${{ matrix.branch_name }}]"
34+
uses: actions/checkout@v4
35+
with:
36+
token: ${{ steps.appauth.outputs.token }}
37+
ref: ${{ matrix.branch_name }}
38+
fetch-depth: 0
39+
40+
# Configure the git user info on the repository
41+
- run: git config user.name "${{ github.actor }}"
42+
- run: git config user.email "${{ github.actor_id }}+${{ github.actor }}@users.noreply.github.com"
43+
44+
# Checkout & run the script from the default branch
45+
- name: 'Checkout ci/envoy-sync-receive.sh'
46+
uses: actions/checkout@v4
47+
with:
48+
ref: ${{ github.event.repository.default_branch }}
49+
sparse-checkout: 'ci/envoy-sync-receive.sh'
50+
sparse-checkout-cone-mode: false
51+
path: '.script'
52+
- run: .script/ci/envoy-sync-receive.sh ${{ matrix.branch_name }}
53+
env:
54+
GH_TOKEN: ${{ steps.appauth.outputs.token }}

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ TAGS
4646
clang-tidy-fixes.yaml
4747
clang.bazelrc
4848
user.bazelrc
49-
CMakeLists.txt
49+
openssl.bazelrc
5050
cmake-build-debug
5151
/linux
5252
bazel.output.txt

CODEOWNERS

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,4 +440,10 @@ extensions/upstreams/tcp @ggreenway @mattklein123
440440
/contrib/dlb @mattklein123 @daixiang0
441441
/contrib/qat/ @giantcroc @soulxu
442442
/contrib/generic_proxy/ @wbpcode @UNOWNED
443-
/contrib/tap_sinks/ @coolg92003 @yiyibaoguo
443+
444+
# The bulk of the files in this envoyproxy/envoy-openssl repository are just
445+
# copied from the upstream envoyproxy/envoy repository by automation.
446+
# Therefore, all of the above code owners should NOT be notified about changes
447+
# to this repository. To achive that, we have a default pattern which overrides
448+
# all the matches from above, and notifies the envoy-openssl-sync team instead.
449+
* @envoyproxy/envoy-openssl-sync

0 commit comments

Comments
 (0)