Skip to content

Commit f7786eb

Browse files
Merge branch 'prebid:master' into master
2 parents 4e2c18a + 1000551 commit f7786eb

File tree

917 files changed

+39297
-9492
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

917 files changed

+39297
-9492
lines changed

.devcontainer/devcontainer.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"image": "mcr.microsoft.com/devcontainers/jekyll:2",
3+
"customizations": {
4+
"vscode": {
5+
"extensions": [
6+
"rebornix.Ruby",
7+
"DavidAnson.vscode-markdownlint"
8+
]
9+
}
10+
}
11+
}

.github/pull_request_template.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Please give a short description and check the matching checkboxes to help us rev
44
55
Please make the PR writeable. This allows us to fix typos, grammar and linting errors ourselves, which makes
66
merging and reviewing a lot faster for everybody.
7+
8+
⚠️ The documentation is merged after the related code changes are merged and release ⚠️
79
-->
810

911
## 🏷 Type of documentation

.github/workflows/ci.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ jobs:
1515
name: run markdownlint
1616
runs-on: ubuntu-latest
1717
steps:
18-
- uses: actions/checkout@v3
18+
- uses: actions/checkout@v4
1919
with:
2020
fetch-depth: 0
21-
- uses: tj-actions/changed-files@v41
21+
- uses: tj-actions/changed-files@v46
2222
id: changed-files
2323
with:
2424
files: '**/*.md'
2525
separator: ","
26-
- uses: DavidAnson/markdownlint-cli2-action@v15
26+
- uses: DavidAnson/markdownlint-cli2-action@v16
2727
if: steps.changed-files.outputs.any_changed == 'true'
2828
with:
2929
globs: "${{ steps.changed-files.outputs.all_changed_files }},!_includes"
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Notify Code Path Changes
2+
3+
on:
4+
pull_request_target:
5+
types: [opened, synchronize]
6+
paths:
7+
- '**'
8+
9+
env:
10+
OAUTH2_CLIENT_ID: ${{ secrets.OAUTH2_CLIENT_ID }}
11+
OAUTH2_CLIENT_SECRET: ${{ secrets.OAUTH2_CLIENT_SECRET }}
12+
OAUTH2_REFRESH_TOKEN: ${{ secrets.OAUTH2_REFRESH_TOKEN }}
13+
GITHUB_REPOSITORY: ${{ github.repository }}
14+
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }}
15+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
16+
17+
permissions:
18+
contents: read
19+
20+
jobs:
21+
notify:
22+
runs-on: ubuntu-latest
23+
steps:
24+
- name: Checkout Code
25+
uses: actions/checkout@v3
26+
27+
- name: Set up Node.js
28+
uses: actions/setup-node@v3
29+
with:
30+
node-version: '18'
31+
32+
- name: Install dependencies
33+
run: npm install axios nodemailer
34+
35+
- name: Run Notification Script
36+
run: |
37+
node .github/workflows/scripts/send-notification-on-change.js
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# when a changed file paths matches the regex, send an alert email
2+
# structure of the file is:
3+
#
4+
# javascriptRegex : email address
5+
#
6+
# For example, in the Prebid docs repo, the file pattern is generally
7+
#
8+
# /dev-docs/bidders/BIDDERCODE.md
9+
#
10+
# The aim is to find a minimal set of regex patterns that matches any file in these paths
11+
12+
/dev-docs/bidders/rubicon : header-bidding@magnite.com
13+
/dev-docs/bidders/ix : pdu-supply-prebid@indexexchange.com
14+
/dev-docs/bidders/appnexus|/dev-docs/bidders/msft : prebid@microsoft.com
15+
/dev-docs/bidders/pubmatic : header-bidding@pubmatic.com
16+
/dev-docs/bidders/openx : prebid@openx.com
17+
/dev-docs/bidders/teads : tech-ssp-video@teads.tv
18+
/dev-docs/bidders/kargo : kraken@kargo.com
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
// send-notification-on-change.js
2+
//
3+
// called by the code-path-changes.yml workflow, this script queries github for
4+
// the changes in the current PR, checks the config file for whether any of those
5+
// file paths are set to alert an email address, and sends email to multiple
6+
// parties if needed
7+
8+
const fs = require('fs');
9+
const path = require('path');
10+
const axios = require('axios');
11+
const nodemailer = require('nodemailer');
12+
13+
async function getAccessToken(clientId, clientSecret, refreshToken) {
14+
try {
15+
const response = await axios.post('https://oauth2.googleapis.com/token', {
16+
client_id: clientId,
17+
client_secret: clientSecret,
18+
refresh_token: refreshToken,
19+
grant_type: 'refresh_token',
20+
});
21+
return response.data.access_token;
22+
} catch (error) {
23+
console.error('Failed to fetch access token:', error.response?.data || error.message);
24+
process.exit(1);
25+
}
26+
}
27+
28+
(async () => {
29+
const configFilePath = path.join(__dirname, 'codepath-notification');
30+
const repo = process.env.GITHUB_REPOSITORY;
31+
const prNumber = process.env.GITHUB_PR_NUMBER;
32+
const token = process.env.GITHUB_TOKEN;
33+
34+
// Generate OAuth2 access token
35+
const clientId = process.env.OAUTH2_CLIENT_ID;
36+
const clientSecret = process.env.OAUTH2_CLIENT_SECRET;
37+
const refreshToken = process.env.OAUTH2_REFRESH_TOKEN;
38+
39+
// validate params
40+
if (!repo || !prNumber || !token || !clientId || !clientSecret || !refreshToken) {
41+
console.error('Missing required environment variables.');
42+
process.exit(1);
43+
}
44+
45+
// the whole process is in a big try/catch. e.g. if the config file doesn't exist, github is down, etc.
46+
try {
47+
// Read and process the configuration file
48+
const configFileContent = fs.readFileSync(configFilePath, 'utf-8');
49+
const configRules = configFileContent
50+
.split('\n')
51+
.filter(line => line.trim() !== '' && !line.trim().startsWith('#')) // Ignore empty lines and comments
52+
.map(line => {
53+
const [regex, email] = line.split(':').map(part => part.trim());
54+
return { regex: new RegExp(regex), email };
55+
});
56+
57+
// Fetch changed files from github
58+
const [owner, repoName] = repo.split('/');
59+
const apiUrl = `https://api.github.com/repos/${owner}/${repoName}/pulls/${prNumber}/files`;
60+
const response = await axios.get(apiUrl, {
61+
headers: {
62+
Authorization: `Bearer ${token}`,
63+
Accept: 'application/vnd.github.v3+json',
64+
},
65+
});
66+
67+
const changedFiles = response.data.map(file => file.filename);
68+
console.log('Changed files:', changedFiles);
69+
70+
// match file pathnames that are in the config and group them by email address
71+
const matchesByEmail = {};
72+
changedFiles.forEach(file => {
73+
configRules.forEach(rule => {
74+
if (rule.regex.test(file)) {
75+
if (!matchesByEmail[rule.email]) {
76+
matchesByEmail[rule.email] = [];
77+
}
78+
matchesByEmail[rule.email].push(file);
79+
}
80+
});
81+
});
82+
83+
// Exit successfully if no matches were found
84+
if (Object.keys(matchesByEmail).length === 0) {
85+
console.log('No matches found. Exiting successfully.');
86+
process.exit(0);
87+
}
88+
89+
console.log('Grouped matches by email:', matchesByEmail);
90+
91+
// get ready to email the changes
92+
const accessToken = await getAccessToken(clientId, clientSecret, refreshToken);
93+
94+
// Configure Nodemailer with OAuth2
95+
// service: 'Gmail',
96+
const transporter = nodemailer.createTransport({
97+
host: "smtp.gmail.com",
98+
port: 465,
99+
secure: true,
100+
auth: {
101+
type: 'OAuth2',
102+
user: 'info@prebid.org',
103+
clientId: clientId,
104+
clientSecret: clientSecret,
105+
refreshToken: refreshToken,
106+
accessToken: accessToken
107+
},
108+
});
109+
110+
// Send one email per recipient
111+
for (const [email, files] of Object.entries(matchesByEmail)) {
112+
const emailBody = `
113+
${email},
114+
<p>
115+
Files owned by you have been changed in open source ${repo}. The <a href="https://github.com/${repo}/pull/${prNumber}">pull request is #${prNumber}</a>. These are the files you own that have been modified:
116+
<ul>
117+
${files.map(file => `<li>${file}</li>`).join('')}
118+
</ul>
119+
`;
120+
121+
try {
122+
await transporter.sendMail({
123+
from: `"Prebid Info" <info@prebid.org>`,
124+
to: email,
125+
subject: `Files have been changed in open source ${repo}`,
126+
html: emailBody,
127+
});
128+
129+
console.log(`Email sent successfully to ${email}`);
130+
console.log(`${emailBody}`);
131+
} catch (error) {
132+
console.error(`Failed to send email to ${email}:`, error.message);
133+
}
134+
}
135+
} catch (error) {
136+
console.error('Error:', error.message);
137+
process.exit(1);
138+
}
139+
})();

ADS - Acceso directo.lnk

885 Bytes
Binary file not shown.

AGENTS.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Agent Guidelines
2+
3+
- Run `markdownlint` on any edited Markdown files using the repository configuration with `markdownlint --config .markdownlint.json README.md`. Replace `README.md` with each file you change.
4+
- If lint errors occur, fix them before creating a pull request.
5+
- Verify the site builds with `bundle exec jekyll build` when possible.
6+
- Please name your branch to include codex or agent in the branch name
7+
- If you cannot run markdownlint please warn your user to setup their environment using the instructions in README.md and document your failure in your pr description

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
source 'https://rubygems.org'
22
gem 'github-pages', '>= 228'
3-
3+
gem 'ffi', '1.16.3'
44
gem "webrick", "~> 1.7"

README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,26 @@ This means an adaptor is not available to download from Prebid.org as soon as th
112112

113113
* [jekyll - check for non empty](https://michaelcurrin.github.io/dev-cheatsheets/cheatsheets/jekyll/liquid/conditionals/non-empty.html)
114114

115+
## Codex
116+
117+
To get started with Codex with Ruby 3.4.4 preinstalled on this repo, you can set up your environment like this
118+
119+
```bash
120+
echo "3.4.4" > .ruby-version
121+
export NOKOGIRI_USE_SYSTEM_LIBRARIES=1
122+
gem install jekyll bundler
123+
npm install boostrap
124+
gem install github-pages --no-document --force
125+
npm install -g markdownlint-cli
126+
bundle install
127+
```
128+
129+
Codex can then check for linting success with
130+
131+
```bash
132+
markdownlint --config .markdownlint.json "**/*.md"
133+
```
134+
115135
## Thanks
116136

117137
Many thanks to the following people who have submitted content to Prebid.org. We really appreciate the help!

0 commit comments

Comments
 (0)