mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2026-02-01 20:10:35 +01:00
Bumps [step-security/harden-runner](https://github.com/step-security/harden-runner) from 2.12.1 to 2.14.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/step-security/harden-runner/releases">step-security/harden-runner's releases</a>.</em></p> <blockquote> <h2>v2.14.0</h2> <h2>What's Changed</h2> <ul> <li>Selective installation: Harden-Runner now skips installation on GitHub-hosted runners when the repository has a custom property skip_harden_runner, allowing organizations to opt out specific repos.</li> <li>Avoid double install: The action no longer installs Harden-Runner if it’s already present on a GitHub-hosted runner, which could happen when a composite action also installs it.</li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/step-security/harden-runner/compare/v2.13.3...v2.14.0">https://github.com/step-security/harden-runner/compare/v2.13.3...v2.14.0</a></p> <h2>v2.13.3</h2> <h2>What's Changed</h2> <ul> <li>Fixed an issue where process events were not uploaded in certain edge cases.</li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/step-security/harden-runner/compare/v2.13.2...v2.13.3">https://github.com/step-security/harden-runner/compare/v2.13.2...v2.13.3</a></p> <h2>v2.13.2</h2> <h2>What's Changed</h2> <ul> <li>Fixed an issue where there was a limit of 512 allowed endpoints when using block egress policy. This restriction has been removed, allowing for an unlimited number of endpoints to be configured.</li> <li>Harden Runner now automatically detects if the agent is already pre-installed on a custom VM image used by a GitHub-hosted runner. When detected, the action will skip reinstallation and use the existing agent.</li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/step-security/harden-runner/compare/v2.13.1...v2.13.2">https://github.com/step-security/harden-runner/compare/v2.13.1...v2.13.2</a></p> <h2>v2.13.1</h2> <h2>What's Changed</h2> <ul> <li> <p>Graceful handling of HTTP errors: Improved error handling when fetching Harden Runner policies from the StepSecurity Policy Store API, ensuring more reliable execution even in case of temporary network/API issues.</p> </li> <li> <p>Security updates for npm dependencies: Updated vulnerable npm package dependencies to the latest secure versions.</p> </li> <li> <p>Faster enterprise agent downloads: The enterprise agent is now downloaded from GitHub Releases instead of packages.stepsecurity.io, improving download speed and reliability.</p> </li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/step-security/harden-runner/compare/v2.13.0...v2.13.1">https://github.com/step-security/harden-runner/compare/v2.13.0...v2.13.1</a></p> <h2>v2.13.0</h2> <h2>What's Changed</h2> <ul> <li>Improved job markdown summary</li> <li>Https monitoring for all domains (included with the enterprise tier)</li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/step-security/harden-runner/compare/v2...v2.13.0">https://github.com/step-security/harden-runner/compare/v2...v2.13.0</a></p> <h2>v2.12.2</h2> <h2>What's Changed</h2> <p>Added HTTPS Monitoring for additional destinations - *.githubusercontent.com Bug fixes:</p> <ul> <li>Implicitly allow local multicast, local unicast and broadcast IP addresses in block mode</li> <li>Increased policy map size for block mode</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="20cf305ff2"><code>20cf305</code></a> Merge pull request <a href="https://redirect.github.com/step-security/harden-runner/issues/622">#622</a> from step-security/feature/custom-property-skip</li> <li><a href="c51e8eeb6c"><code>c51e8ee</code></a> feat: skip agent install and post step on subsequent runs for GitHub-hosted r...</li> <li><a href="e152b90204"><code>e152b90</code></a> feat: skip harden-runner based on repository custom property</li> <li><a href="ee1faec052"><code>ee1faec</code></a> feat: replace skip-harden-runner with skip-on-custom-property input</li> <li><a href="1dc7c17646"><code>1dc7c17</code></a> feat: add skip-harden-runner input to conditionally skip execution</li> <li><a href="df199fb7be"><code>df199fb</code></a> Merge pull request <a href="https://redirect.github.com/step-security/harden-runner/issues/620">#620</a> from step-security/rc-29</li> <li><a href="03d096a772"><code>03d096a</code></a> update agent</li> <li><a href="40901073af"><code>4090107</code></a> fix: update agent</li> <li><a href="95d9a5deda"><code>95d9a5d</code></a> Merge pull request <a href="https://redirect.github.com/step-security/harden-runner/issues/606">#606</a> from step-security/rc-28</li> <li><a href="87e429d3fb"><code>87e429d</code></a> Update limitations.md</li> <li>Additional commits viewable in <a href="https://github.com/step-security/harden-runner/compare/v2.12.1...20cf305ff2072d973412fa9b1e3a4f227bda3c76">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
296 lines
12 KiB
YAML
296 lines
12 KiB
YAML
name: Check TOML Translation Files on PR
|
|
|
|
# This workflow validates TOML translation files
|
|
|
|
on:
|
|
pull_request_target:
|
|
types: [opened, synchronize, reopened]
|
|
paths:
|
|
- "frontend/public/locales/*/translation.toml"
|
|
|
|
# cancel in-progress jobs if a new job is triggered
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref_name || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read # Allow read access to repository content
|
|
|
|
jobs:
|
|
check-files:
|
|
if: github.event_name == 'pull_request_target'
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
issues: write # Allow posting comments on issues/PRs
|
|
pull-requests: write # Allow writing to pull requests
|
|
steps:
|
|
- name: Harden Runner
|
|
uses: step-security/harden-runner@20cf305ff2072d973412fa9b1e3a4f227bda3c76 # v2.14.0
|
|
with:
|
|
egress-policy: audit
|
|
|
|
- name: Checkout main branch first
|
|
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
|
|
|
|
- name: Setup GitHub App Bot
|
|
id: setup-bot
|
|
uses: ./.github/actions/setup-bot
|
|
with:
|
|
app-id: ${{ secrets.GH_APP_ID }}
|
|
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
|
|
|
|
- name: Get PR data
|
|
id: get-pr-data
|
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
|
with:
|
|
github-token: ${{ steps.setup-bot.outputs.token }}
|
|
script: |
|
|
const prNumber = context.payload.pull_request.number;
|
|
const repoOwner = context.payload.repository.owner.login;
|
|
const repoName = context.payload.repository.name;
|
|
const branch = context.payload.pull_request.head.ref;
|
|
|
|
console.log(`PR Number: ${prNumber}`);
|
|
console.log(`Repo Owner: ${repoOwner}`);
|
|
console.log(`Repo Name: ${repoName}`);
|
|
console.log(`Branch: ${branch}`);
|
|
|
|
core.setOutput("pr_number", prNumber);
|
|
core.setOutput("repo_owner", repoOwner);
|
|
core.setOutput("repo_name", repoName);
|
|
core.setOutput("branch", branch);
|
|
continue-on-error: true
|
|
|
|
- name: Fetch PR changed files
|
|
id: fetch-pr-changes
|
|
env:
|
|
GH_TOKEN: ${{ steps.setup-bot.outputs.token }}
|
|
run: |
|
|
echo "Fetching PR changed files..."
|
|
echo "Getting list of changed files from PR..."
|
|
# Check if PR number exists
|
|
if [ -z "${{ steps.get-pr-data.outputs.pr_number }}" ]; then
|
|
echo "Error: PR number is empty"
|
|
exit 1
|
|
fi
|
|
# Get changed files and filter for TOML translation files
|
|
gh pr view ${{ steps.get-pr-data.outputs.pr_number }} --json files -q ".files[].path" | grep -E '^frontend/public/locales/[a-zA-Z-]+/translation\.toml$' > changed_files.txt || echo "No matching TOML files found in PR"
|
|
# Check if any files were found
|
|
if [ ! -s changed_files.txt ]; then
|
|
echo "No TOML translation files changed in this PR"
|
|
echo "Workflow will exit early as no relevant files to check"
|
|
exit 0
|
|
fi
|
|
echo "Found $(wc -l < changed_files.txt) matching TOML files"
|
|
|
|
- name: Determine reference file
|
|
id: determine-file
|
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
|
with:
|
|
github-token: ${{ steps.setup-bot.outputs.token }}
|
|
script: |
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const prNumber = ${{ steps.get-pr-data.outputs.pr_number }};
|
|
const repoOwner = "${{ steps.get-pr-data.outputs.repo_owner }}";
|
|
const repoName = "${{ steps.get-pr-data.outputs.repo_name }}";
|
|
|
|
const prRepoOwner = "${{ github.event.pull_request.head.repo.owner.login }}";
|
|
const prRepoName = "${{ github.event.pull_request.head.repo.name }}";
|
|
const branch = "${{ steps.get-pr-data.outputs.branch }}";
|
|
|
|
console.log(`Determining reference file for PR #${prNumber}`);
|
|
|
|
// Validate inputs
|
|
const validateInput = (input, regex, name) => {
|
|
if (!regex.test(input)) {
|
|
throw new Error(`Invalid ${name}: ${input}`);
|
|
}
|
|
};
|
|
|
|
validateInput(repoOwner, /^[a-zA-Z0-9_-]+$/, "repository owner");
|
|
validateInput(repoName, /^[a-zA-Z0-9._-]+$/, "repository name");
|
|
validateInput(branch, /^[a-zA-Z0-9._/-]+$/, "branch name");
|
|
|
|
// Get the list of changed files in the PR
|
|
const { data: files } = await github.rest.pulls.listFiles({
|
|
owner: repoOwner,
|
|
repo: repoName,
|
|
pull_number: prNumber,
|
|
});
|
|
|
|
// Filter for relevant TOML files based on the PR changes
|
|
const changedFiles = files
|
|
.filter(file =>
|
|
file.status !== "removed" &&
|
|
/^frontend\/public\/locales\/[a-zA-Z-]+\/translation\.toml$/.test(file.filename)
|
|
)
|
|
.map(file => file.filename);
|
|
|
|
console.log("Changed files:", changedFiles);
|
|
|
|
// Create a temporary directory for PR files
|
|
const tempDir = "pr-branch";
|
|
if (!fs.existsSync(tempDir)) {
|
|
fs.mkdirSync(tempDir, { recursive: true });
|
|
}
|
|
|
|
// Download and save each changed file
|
|
for (const file of changedFiles) {
|
|
const { data: fileContent } = await github.rest.repos.getContent({
|
|
owner: prRepoOwner,
|
|
repo: prRepoName,
|
|
path: file,
|
|
ref: branch,
|
|
});
|
|
|
|
const content = Buffer.from(fileContent.content, "base64").toString("utf-8");
|
|
const filePath = path.join(tempDir, file);
|
|
const dirPath = path.dirname(filePath);
|
|
|
|
if (!fs.existsSync(dirPath)) {
|
|
fs.mkdirSync(dirPath, { recursive: true });
|
|
}
|
|
|
|
fs.writeFileSync(filePath, content);
|
|
console.log(`Saved file: ${filePath}`);
|
|
}
|
|
|
|
// Output the list of changed files for further processing
|
|
const fileList = changedFiles.join(" ");
|
|
core.exportVariable("FILES_LIST", fileList);
|
|
console.log("Files saved and listed in FILES_LIST.");
|
|
|
|
// Determine reference file
|
|
let referenceFilePath;
|
|
if (changedFiles.includes("frontend/public/locales/en-GB/translation.toml")) {
|
|
console.log("Using PR branch reference file.");
|
|
const { data: fileContent } = await github.rest.repos.getContent({
|
|
owner: prRepoOwner,
|
|
repo: prRepoName,
|
|
path: "frontend/public/locales/en-GB/translation.toml",
|
|
ref: branch,
|
|
});
|
|
|
|
referenceFilePath = "pr-branch-translation-en-GB.toml";
|
|
const content = Buffer.from(fileContent.content, "base64").toString("utf-8");
|
|
fs.writeFileSync(referenceFilePath, content);
|
|
} else {
|
|
console.log("Using main branch reference file.");
|
|
const { data: fileContent } = await github.rest.repos.getContent({
|
|
owner: repoOwner,
|
|
repo: repoName,
|
|
path: "frontend/public/locales/en-GB/translation.toml",
|
|
ref: "main",
|
|
});
|
|
|
|
referenceFilePath = "main-branch-translation-en-GB.toml";
|
|
const content = Buffer.from(fileContent.content, "base64").toString("utf-8");
|
|
fs.writeFileSync(referenceFilePath, content);
|
|
}
|
|
|
|
console.log(`Reference file path: ${referenceFilePath}`);
|
|
core.exportVariable("REFERENCE_FILE", referenceFilePath);
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Install Python dependencies
|
|
run: pip install --require-hashes -r ./.github/scripts/requirements_sync_readme.txt
|
|
|
|
- name: Run Python script to check files
|
|
id: run-check
|
|
run: |
|
|
echo "Running Python script to check TOML files..."
|
|
python .github/scripts/check_language_toml.py \
|
|
--actor ${{ github.event.pull_request.user.login }} \
|
|
--reference-file "${REFERENCE_FILE}" \
|
|
--branch "pr-branch" \
|
|
--files "${FILES_LIST[@]}" > result.txt
|
|
continue-on-error: true # Continue the job even if this step fails
|
|
|
|
- name: Capture output
|
|
id: capture-output
|
|
run: |
|
|
if [ -f result.txt ] && [ -s result.txt ]; then
|
|
echo "Capturing output..."
|
|
SCRIPT_OUTPUT=$(cat result.txt)
|
|
echo "SCRIPT_OUTPUT<<EOF" >> $GITHUB_ENV
|
|
echo "$SCRIPT_OUTPUT" >> $GITHUB_ENV
|
|
echo "EOF" >> $GITHUB_ENV
|
|
echo "${SCRIPT_OUTPUT}"
|
|
|
|
# Determine job failure based on script output
|
|
if [[ "$SCRIPT_OUTPUT" == *"❌"* ]]; then
|
|
echo "FAIL_JOB=true" >> $GITHUB_ENV
|
|
else
|
|
echo "FAIL_JOB=false" >> $GITHUB_ENV
|
|
fi
|
|
else
|
|
echo "No output found."
|
|
echo "SCRIPT_OUTPUT=" >> $GITHUB_ENV
|
|
echo "FAIL_JOB=false" >> $GITHUB_ENV
|
|
fi
|
|
|
|
- name: Post comment on PR
|
|
if: env.SCRIPT_OUTPUT != ''
|
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
|
with:
|
|
github-token: ${{ steps.setup-bot.outputs.token }}
|
|
script: |
|
|
const { GITHUB_REPOSITORY, SCRIPT_OUTPUT } = process.env;
|
|
const [repoOwner, repoName] = GITHUB_REPOSITORY.split('/');
|
|
const issueNumber = context.issue.number;
|
|
|
|
// Find existing comment
|
|
const comments = await github.rest.issues.listComments({
|
|
owner: repoOwner,
|
|
repo: repoName,
|
|
issue_number: issueNumber
|
|
});
|
|
|
|
const comment = comments.data.find(c => c.body.includes("## 🌐 TOML Translation Verification Summary"));
|
|
|
|
// Only update or create comments by the action user
|
|
const expectedActor = "${{ steps.setup-bot.outputs.app-slug }}[bot]";
|
|
|
|
if (comment && comment.user.login === expectedActor) {
|
|
// Update existing comment
|
|
await github.rest.issues.updateComment({
|
|
owner: repoOwner,
|
|
repo: repoName,
|
|
comment_id: comment.id,
|
|
body: `## 🌐 TOML Translation Verification Summary\n\n\n${SCRIPT_OUTPUT}\n`
|
|
});
|
|
console.log("Updated existing comment.");
|
|
} else if (!comment) {
|
|
// Create new comment if no existing comment is found
|
|
await github.rest.issues.createComment({
|
|
owner: repoOwner,
|
|
repo: repoName,
|
|
issue_number: issueNumber,
|
|
body: `## 🌐 TOML Translation Verification Summary\n\n\n${SCRIPT_OUTPUT}\n`
|
|
});
|
|
console.log("Created new comment.");
|
|
} else {
|
|
console.log("Comment update attempt denied. Actor does not match.");
|
|
}
|
|
|
|
- name: Fail job if errors found
|
|
if: env.FAIL_JOB == 'true'
|
|
run: |
|
|
echo "Failing the job because errors were detected."
|
|
exit 1
|
|
|
|
- name: Cleanup temporary files
|
|
if: always()
|
|
run: |
|
|
echo "Cleaning up temporary files..."
|
|
rm -rf pr-branch
|
|
rm -f pr-branch-translation-en-GB.toml main-branch-translation-en-GB.toml changed_files.txt result.txt
|
|
echo "Cleanup complete."
|
|
continue-on-error: true # Ensure cleanup runs even if previous steps fail
|