mirror of
https://github.com/ivuorinen/actions.git
synced 2026-02-12 05:46:48 +00:00
Compare commits
16 Commits
v25.11.26
...
v2025.12.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7aa206a02a | ||
|
|
8481bbb5cd | ||
|
|
4c0068e6e7 | ||
|
|
5cecfe7cbe | ||
|
|
0288a1c8b8 | ||
| 44a11e9773 | |||
|
|
a52399cf74 | ||
|
|
803165db8f | ||
|
|
d69ed9e999 | ||
|
|
8eea6f781b | ||
|
|
4889586a94 | ||
|
|
e02ca4d843 | ||
|
|
13ef0db9ba | ||
|
|
c366e99ee3 | ||
| fbbb487332 | |||
| abe24f8570 |
@@ -17,7 +17,7 @@ runs:
|
|||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4
|
uses: astral-sh/setup-uv@ed21f2f24f8dd64503750218de024bcf64c7250a # v7.1.5
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ runs:
|
|||||||
run: uv sync --frozen
|
run: uv sync --frozen
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version: '24'
|
node-version: '24'
|
||||||
cache: npm
|
cache: npm
|
||||||
|
|||||||
16
.github/codeql/codeql-config.yml
vendored
16
.github/codeql/codeql-config.yml
vendored
@@ -15,3 +15,19 @@ paths-ignore:
|
|||||||
# Use security and quality query suite
|
# Use security and quality query suite
|
||||||
queries:
|
queries:
|
||||||
- uses: security-and-quality
|
- uses: security-and-quality
|
||||||
|
|
||||||
|
# Suppress specific false positives
|
||||||
|
# These findings have been manually reviewed and determined to be false positives
|
||||||
|
# with appropriate security controls in place
|
||||||
|
query-filters:
|
||||||
|
# docker-publish: Code injection in validated context
|
||||||
|
# False positive: User input is validated and sanitized before use
|
||||||
|
# - Only relative paths and trusted git URLs are allowed
|
||||||
|
# - Absolute paths and arbitrary URLs are rejected
|
||||||
|
# - Path traversal attempts are blocked
|
||||||
|
# - Custom contexts require explicit opt-in via use-custom-context: true
|
||||||
|
# - Wraps docker/build-push-action (trusted Docker-maintained action)
|
||||||
|
# - Action is designed for trusted workflows only (documented in action.yml)
|
||||||
|
- exclude:
|
||||||
|
id: js/actions/code-injection
|
||||||
|
kind: problem
|
||||||
|
|||||||
2
.github/workflows/action-security.yml
vendored
2
.github/workflows/action-security.yml
vendored
@@ -48,7 +48,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Notify on Critical Issues
|
- name: Notify on Critical Issues
|
||||||
if: failure() && steps.security-scan.outputs.critical_issues != '0'
|
if: failure() && steps.security-scan.outputs.critical_issues != '0'
|
||||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
|
||||||
with:
|
with:
|
||||||
script: |-
|
script: |-
|
||||||
const { repo, owner } = context.repo;
|
const { repo, owner } = context.repo;
|
||||||
|
|||||||
2
.github/workflows/build-testing-image.yml
vendored
2
.github/workflows/build-testing-image.yml
vendored
@@ -49,7 +49,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Extract metadata
|
- name: Extract metadata
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@318604b99e75e41977312d83839a89be02ca4893 # v5.9.0
|
uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # v5.10.0
|
||||||
with:
|
with:
|
||||||
images: ghcr.io/${{ github.repository_owner }}/actions
|
images: ghcr.io/${{ github.repository_owner }}/actions
|
||||||
tags: |
|
tags: |
|
||||||
|
|||||||
1
.github/workflows/codeql-new.yml
vendored
1
.github/workflows/codeql-new.yml
vendored
@@ -42,4 +42,5 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
language: ${{ matrix.language }}
|
language: ${{ matrix.language }}
|
||||||
queries: security-and-quality
|
queries: security-and-quality
|
||||||
|
config-file: .github/codeql/codeql-config.yml
|
||||||
token: ${{ github.token }}
|
token: ${{ github.token }}
|
||||||
|
|||||||
2
.github/workflows/issue-stats.yml
vendored
2
.github/workflows/issue-stats.yml
vendored
@@ -30,7 +30,7 @@ jobs:
|
|||||||
echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV"
|
echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV"
|
||||||
|
|
||||||
- name: Run issue-metrics tool
|
- name: Run issue-metrics tool
|
||||||
uses: github/issue-metrics@78b1d469a1b1c94945b15bd71dedcb1928667f49 # v3.25.3
|
uses: github/issue-metrics@55bb0b704982057a101ab7515fb72b2293927c8a # v3.25.4
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
SEARCH_QUERY: 'repo:ivuorinen/actions is:issue created:${{ env.last_month }} -reason:"not planned"'
|
SEARCH_QUERY: 'repo:ivuorinen/actions is:issue created:${{ env.last_month }} -reason:"not planned"'
|
||||||
|
|||||||
41
.github/workflows/new-release.yml
vendored
41
.github/workflows/new-release.yml
vendored
@@ -22,27 +22,28 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6-beta
|
- uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6-beta
|
||||||
|
|
||||||
- name: Create tag if necessary
|
- name: Create daily release
|
||||||
uses: fregante/daily-version-action@fb1a60b7c4daf1410cd755e360ebec3901e58588 # v2.1.3
|
|
||||||
id: daily-version
|
id: daily-version
|
||||||
with:
|
run: |
|
||||||
prefix: v
|
set -eu
|
||||||
|
|
||||||
- name: Create changelog text
|
VERSION="v$(date '+%Y.%m.%d')"
|
||||||
if: steps.daily-version.outputs.created
|
printf '%s\n' "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||||
id: changelog
|
|
||||||
uses: loopwerk/tag-changelog@941366edb8920e2071eae0449031830984b9f26e # v1.3.0
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
config_file: .github/tag-changelog-config.js
|
|
||||||
|
|
||||||
- name: Create release
|
# Check if release already exists
|
||||||
if: steps.daily-version.outputs.created
|
if gh release view "$VERSION" >/dev/null 2>&1; then
|
||||||
uses: ncipollo/release-action@b7eabc95ff50cbeeedec83973935c8f306dfcd0b # v1.20.0
|
printf '%s\n' "created=false" >> "$GITHUB_OUTPUT"
|
||||||
|
printf '%s\n' "Release $VERSION already exists - skipping"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create release with auto-generated changelog (also creates tag)
|
||||||
|
gh release create "$VERSION" \
|
||||||
|
--title "Release $VERSION" \
|
||||||
|
--generate-notes \
|
||||||
|
--target main
|
||||||
|
|
||||||
|
printf '%s\n' "created=true" >> "$GITHUB_OUTPUT"
|
||||||
|
printf '%s\n' "Created release $VERSION"
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
|
||||||
tag: ${{ steps.daily-version.outputs.version }}
|
|
||||||
name: Release ${{ steps.daily-version.outputs.version }}
|
|
||||||
body: ${{ steps.changelog.outputs.changes }}
|
|
||||||
allowUpdates: true
|
|
||||||
|
|||||||
4
.github/workflows/pr-lint.yml
vendored
4
.github/workflows/pr-lint.yml
vendored
@@ -74,14 +74,14 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload SARIF Report
|
- name: Upload SARIF Report
|
||||||
if: always() && hashFiles('megalinter-reports/sarif/*.sarif')
|
if: always() && hashFiles('megalinter-reports/sarif/*.sarif')
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
sarif_file: megalinter-reports/sarif
|
sarif_file: megalinter-reports/sarif
|
||||||
category: megalinter
|
category: megalinter
|
||||||
|
|
||||||
- name: Check Results
|
- name: Check Results
|
||||||
if: always()
|
if: always()
|
||||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const status = '${{ steps.pr-lint.outputs.validation_status }}';
|
const status = '${{ steps.pr-lint.outputs.validation_status }}';
|
||||||
|
|||||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -17,6 +17,6 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6-beta
|
- uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6-beta
|
||||||
- uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2
|
- uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0
|
||||||
with:
|
with:
|
||||||
generate_release_notes: true
|
generate_release_notes: true
|
||||||
|
|||||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -25,7 +25,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: 🚀 Run stale
|
- name: 🚀 Run stale
|
||||||
uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0
|
uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
days-before-stale: 30
|
days-before-stale: 30
|
||||||
|
|||||||
2
.github/workflows/test-actions.yml
vendored
2
.github/workflows/test-actions.yml
vendored
@@ -73,7 +73,7 @@ jobs:
|
|||||||
if: always()
|
if: always()
|
||||||
|
|
||||||
- name: Upload SARIF file
|
- name: Upload SARIF file
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
if: always() && hashFiles('_tests/reports/test-results.sarif') != ''
|
if: always() && hashFiles('_tests/reports/test-results.sarif') != ''
|
||||||
with:
|
with:
|
||||||
sarif_file: _tests/reports/test-results.sarif
|
sarif_file: _tests/reports/test-results.sarif
|
||||||
|
|||||||
8
.github/workflows/version-maintenance.yml
vendored
8
.github/workflows/version-maintenance.yml
vendored
@@ -49,7 +49,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
if: steps.action-versioning.outputs.updated == 'true'
|
if: steps.action-versioning.outputs.updated == 'true'
|
||||||
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9
|
uses: peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676 # v7.0.11
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
commit-message: 'chore: update action references to ${{ steps.version.outputs.major }}'
|
commit-message: 'chore: update action references to ${{ steps.version.outputs.major }}'
|
||||||
@@ -68,8 +68,6 @@ jobs:
|
|||||||
```bash
|
```bash
|
||||||
make check-version-refs
|
make check-version-refs
|
||||||
```
|
```
|
||||||
|
|
||||||
🤖 Auto-generated by version-maintenance workflow
|
|
||||||
branch: automated/version-update-${{ steps.version.outputs.major }}
|
branch: automated/version-update-${{ steps.version.outputs.major }}
|
||||||
delete-branch: true
|
delete-branch: true
|
||||||
labels: |
|
labels: |
|
||||||
@@ -78,7 +76,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Check for Annual Bump
|
- name: Check for Annual Bump
|
||||||
if: steps.action-versioning.outputs.needs-annual-bump == 'true'
|
if: steps.action-versioning.outputs.needs-annual-bump == 'true'
|
||||||
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const currentYear = new Date().getFullYear();
|
const currentYear = new Date().getFullYear();
|
||||||
@@ -120,8 +118,6 @@ jobs:
|
|||||||
\`\`\`bash
|
\`\`\`bash
|
||||||
make check-version-refs
|
make check-version-refs
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
🤖 Auto-generated by version-maintenance workflow
|
|
||||||
`,
|
`,
|
||||||
labels: ['maintenance', 'high-priority']
|
labels: ['maintenance', 'high-priority']
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ repos:
|
|||||||
types: [markdown, python, yaml]
|
types: [markdown, python, yaml]
|
||||||
files: ^(docs/.*|README\.md|CONTRIBUTING\.md|CHANGELOG\.md|.*\.py|.*\.ya?ml)$
|
files: ^(docs/.*|README\.md|CONTRIBUTING\.md|CHANGELOG\.md|.*\.py|.*\.ya?ml)$
|
||||||
- repo: https://github.com/astral-sh/uv-pre-commit
|
- repo: https://github.com/astral-sh/uv-pre-commit
|
||||||
rev: 0.9.11
|
rev: 0.9.16
|
||||||
hooks:
|
hooks:
|
||||||
- id: uv-lock
|
- id: uv-lock
|
||||||
- id: uv-sync
|
- id: uv-sync
|
||||||
@@ -44,7 +44,7 @@ repos:
|
|||||||
args: [--autofix, --no-sort-keys]
|
args: [--autofix, --no-sort-keys]
|
||||||
|
|
||||||
- repo: https://github.com/DavidAnson/markdownlint-cli2
|
- repo: https://github.com/DavidAnson/markdownlint-cli2
|
||||||
rev: v0.19.1
|
rev: v0.20.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: markdownlint-cli2
|
- id: markdownlint-cli2
|
||||||
args: [--fix]
|
args: [--fix]
|
||||||
@@ -55,7 +55,7 @@ repos:
|
|||||||
- id: yamllint
|
- id: yamllint
|
||||||
|
|
||||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
rev: v0.14.6
|
rev: v0.14.8
|
||||||
hooks:
|
hooks:
|
||||||
# Run the linter with auto-fix
|
# Run the linter with auto-fix
|
||||||
- id: ruff-check
|
- id: ruff-check
|
||||||
@@ -83,11 +83,6 @@ repos:
|
|||||||
- id: actionlint
|
- id: actionlint
|
||||||
args: ['-shellcheck=']
|
args: ['-shellcheck=']
|
||||||
|
|
||||||
- repo: https://github.com/renovatebot/pre-commit-hooks
|
|
||||||
rev: 42.19.3
|
|
||||||
hooks:
|
|
||||||
- id: renovate-config-validator
|
|
||||||
|
|
||||||
- repo: https://github.com/bridgecrewio/checkov.git
|
- repo: https://github.com/bridgecrewio/checkov.git
|
||||||
rev: '3.2.495'
|
rev: '3.2.495'
|
||||||
hooks:
|
hooks:
|
||||||
@@ -96,6 +91,6 @@ repos:
|
|||||||
- '--quiet'
|
- '--quiet'
|
||||||
|
|
||||||
- repo: https://github.com/gitleaks/gitleaks
|
- repo: https://github.com/gitleaks/gitleaks
|
||||||
rev: v8.29.1
|
rev: v8.30.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: gitleaks
|
- id: gitleaks
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
3.14.0
|
3.14.1
|
||||||
|
|||||||
@@ -76,11 +76,7 @@ if ! git diff --quiet; then
|
|||||||
git commit -m "chore: bump major version from $OLD_VERSION to $NEW_VERSION
|
git commit -m "chore: bump major version from $OLD_VERSION to $NEW_VERSION
|
||||||
|
|
||||||
This commit updates all internal action references from $OLD_VERSION
|
This commit updates all internal action references from $OLD_VERSION
|
||||||
to $NEW_VERSION.
|
to $NEW_VERSION."
|
||||||
|
|
||||||
🤖 Generated with [Claude Code](https://claude.com/claude-code)
|
|
||||||
|
|
||||||
Co-Authored-By: Claude <noreply@anthropic.com>"
|
|
||||||
|
|
||||||
printf '%b' "${GREEN}✅ Committed version bump${NC}\n"
|
printf '%b' "${GREEN}✅ Committed version bump${NC}\n"
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ runs:
|
|||||||
find . -maxdepth 2 -name "action.yml" -path "*/action.yml" ! -path "./_*" ! -path "./.github/*" -exec grep -h "uses: ivuorinen/actions/" {} \; > "$temp_file"
|
find . -maxdepth 2 -name "action.yml" -path "*/action.yml" ! -path "./_*" ! -path "./.github/*" -exec grep -h "uses: ivuorinen/actions/" {} \; > "$temp_file"
|
||||||
|
|
||||||
while IFS= read -r line; do
|
while IFS= read -r line; do
|
||||||
current_sha=$(echo "$line" | grep -oE '@[a-f0-9]{40}' | sed 's/@//')
|
current_sha=$(printf '%s' "$line" | grep -oE '@[a-f0-9]{40}' | sed 's/@//')
|
||||||
|
|
||||||
if [ "$current_sha" != "$TAG_SHA" ]; then
|
if [ "$current_sha" != "$TAG_SHA" ]; then
|
||||||
echo "Found outdated reference: $current_sha (should be $TAG_SHA)"
|
echo "Found outdated reference: $current_sha (should be $TAG_SHA)"
|
||||||
@@ -153,11 +153,7 @@ runs:
|
|||||||
git commit -m "chore: update action references to $MAJOR_VERSION ($TAG_SHA)" \
|
git commit -m "chore: update action references to $MAJOR_VERSION ($TAG_SHA)" \
|
||||||
-m "" \
|
-m "" \
|
||||||
-m "This commit updates all internal action references to point to the latest" \
|
-m "This commit updates all internal action references to point to the latest" \
|
||||||
-m "$MAJOR_VERSION tag SHA." \
|
-m "$MAJOR_VERSION tag SHA."
|
||||||
-m "" \
|
|
||||||
-m "🤖 Generated with [Claude Code](https://claude.com/claude-code)" \
|
|
||||||
-m "" \
|
|
||||||
-m "Co-Authored-By: Claude <noreply@anthropic.com>"
|
|
||||||
|
|
||||||
commit_sha=$(git rev-parse HEAD)
|
commit_sha=$(git rev-parse HEAD)
|
||||||
printf '%s\n' "sha=$commit_sha" >> "$GITHUB_OUTPUT"
|
printf '%s\n' "sha=$commit_sha" >> "$GITHUB_OUTPUT"
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ runs:
|
|||||||
if: steps.check-files.outputs.files_found == 'true'
|
if: steps.check-files.outputs.files_found == 'true'
|
||||||
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
|
uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.14'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
|
|
||||||
- name: Install ansible-lint
|
- name: Install ansible-lint
|
||||||
@@ -130,6 +130,6 @@ runs:
|
|||||||
|
|
||||||
- name: Upload SARIF Report
|
- name: Upload SARIF Report
|
||||||
if: steps.check-files.outputs.files_found == 'true'
|
if: steps.check-files.outputs.files_found == 'true'
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
sarif_file: ansible-lint.sarif
|
sarif_file: ansible-lint.sarif
|
||||||
|
|||||||
@@ -181,9 +181,9 @@ runs:
|
|||||||
echo "Detected package manager: $package_manager"
|
echo "Detected package manager: $package_manager"
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version: '22'
|
node-version: '24'
|
||||||
|
|
||||||
- name: Enable Corepack
|
- name: Enable Corepack
|
||||||
shell: sh
|
shell: sh
|
||||||
@@ -331,7 +331,7 @@ runs:
|
|||||||
|
|
||||||
- name: Upload SARIF Report
|
- name: Upload SARIF Report
|
||||||
if: inputs.mode == 'check' && always()
|
if: inputs.mode == 'check' && always()
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
sarif_file: biome-report.sarif
|
sarif_file: biome-report.sarif
|
||||||
|
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ runs:
|
|||||||
echo "Using build mode: $build_mode"
|
echo "Using build mode: $build_mode"
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/init@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
languages: ${{ inputs.language }}
|
languages: ${{ inputs.language }}
|
||||||
queries: ${{ inputs.queries }}
|
queries: ${{ inputs.queries }}
|
||||||
@@ -199,12 +199,12 @@ runs:
|
|||||||
threads: ${{ inputs.threads }}
|
threads: ${{ inputs.threads }}
|
||||||
|
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/autobuild@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
if: ${{ steps.set-build-mode.outputs.build-mode == 'autobuild' }}
|
if: ${{ steps.set-build-mode.outputs.build-mode == 'autobuild' }}
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
id: analysis
|
id: analysis
|
||||||
uses: github/codeql-action/analyze@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/analyze@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
category: ${{ steps.set-category.outputs.category }}
|
category: ${{ steps.set-category.outputs.category }}
|
||||||
upload: ${{ inputs.upload-results }}
|
upload: ${{ inputs.upload-results }}
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ runs:
|
|||||||
|
|
||||||
- name: Create New Pull Request If Needed
|
- name: Create New Pull Request If Needed
|
||||||
if: steps.calibre.outputs.markdown != ''
|
if: steps.calibre.outputs.markdown != ''
|
||||||
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9
|
uses: peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676 # v7.0.11
|
||||||
with:
|
with:
|
||||||
token: ${{ inputs.token }}
|
token: ${{ inputs.token }}
|
||||||
title: 'chore: compress images'
|
title: 'chore: compress images'
|
||||||
|
|||||||
@@ -206,6 +206,6 @@ runs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Upload SARIF Report
|
- name: Upload SARIF Report
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
sarif_file: dotnet-format.sarif
|
sarif_file: dotnet-format.sarif
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ runs:
|
|||||||
dockerhub|github|both)
|
dockerhub|github|both)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "::error::Invalid registry value. Must be 'dockerhub', 'github', or 'both'"
|
printf '%s\n' "::error::Invalid registry value. Must be 'dockerhub', 'github', or 'both'"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -120,7 +120,7 @@ runs:
|
|||||||
# Validate Docker Hub credentials if needed
|
# Validate Docker Hub credentials if needed
|
||||||
if [ "$INPUT_REGISTRY" = "dockerhub" ] || [ "$INPUT_REGISTRY" = "both" ]; then
|
if [ "$INPUT_REGISTRY" = "dockerhub" ] || [ "$INPUT_REGISTRY" = "both" ]; then
|
||||||
if [ -z "$INPUT_DOCKERHUB_USERNAME" ] || [ -z "$INPUT_DOCKERHUB_TOKEN" ]; then
|
if [ -z "$INPUT_DOCKERHUB_USERNAME" ] || [ -z "$INPUT_DOCKERHUB_TOKEN" ]; then
|
||||||
echo "::error::Docker Hub username and token are required when publishing to Docker Hub"
|
printf '%s\n' "::error::Docker Hub username and token are required when publishing to Docker Hub"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -129,46 +129,77 @@ runs:
|
|||||||
if [ "$INPUT_REGISTRY" = "github" ] || [ "$INPUT_REGISTRY" = "both" ]; then
|
if [ "$INPUT_REGISTRY" = "github" ] || [ "$INPUT_REGISTRY" = "both" ]; then
|
||||||
token="${INPUT_TOKEN:-${GITHUB_TOKEN:-}}"
|
token="${INPUT_TOKEN:-${GITHUB_TOKEN:-}}"
|
||||||
if [ -z "$token" ]; then
|
if [ -z "$token" ]; then
|
||||||
echo "::error::GitHub token is required when publishing to GitHub Packages"
|
printf '%s\n' "::error::GitHub token is required when publishing to GitHub Packages"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Validate context input for security
|
# Validate context input for security
|
||||||
INPUT_CONTEXT="${INPUT_CONTEXT:-.}"
|
INPUT_CONTEXT="${INPUT_CONTEXT:-.}"
|
||||||
|
|
||||||
case "$INPUT_CONTEXT" in
|
case "$INPUT_CONTEXT" in
|
||||||
.|./*|*/*)
|
.|./*|*/*)
|
||||||
# Relative paths are allowed
|
# Relative paths are allowed
|
||||||
|
# Check for path traversal attempts
|
||||||
|
case "$INPUT_CONTEXT" in
|
||||||
|
*/../*|../*|*/..)
|
||||||
|
printf '%s\n' "::error::Context path contains path traversal: '$INPUT_CONTEXT'"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
/*)
|
/*)
|
||||||
echo "::error::Context cannot be an absolute path: '$INPUT_CONTEXT'"
|
printf '%s\n' "::error::Context cannot be an absolute path: '$INPUT_CONTEXT'"
|
||||||
echo "::error::Use relative paths (e.g., '.', './app') to prevent code injection"
|
printf '%s\n' "::error::Use relative paths (e.g., '.', './app')"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
*://*)
|
git://*|git@*|https://*.git|https://github.com/*|https://gitlab.com/*)
|
||||||
echo "::warning::Context is a remote URL: '$INPUT_CONTEXT'"
|
# Allow trusted git repository URLs
|
||||||
echo "::warning::Ensure this URL is from a trusted source to prevent code injection"
|
printf '%s\n' "::notice::Using git repository URL for context"
|
||||||
|
;;
|
||||||
|
http://*|https://*)
|
||||||
|
printf '%s\n' "::error::Context cannot be an arbitrary HTTP URL: '$INPUT_CONTEXT'"
|
||||||
|
printf '%s\n' "::error::Only git repository URLs are allowed for remote contexts"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf '%s\n' "::error::Invalid context format: '$INPUT_CONTEXT'"
|
||||||
|
printf '%s\n' "::error::Must be a relative path or git repository URL"
|
||||||
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Validate dockerfile input for security
|
# Validate dockerfile input for security
|
||||||
INPUT_DOCKERFILE="${INPUT_DOCKERFILE:-Dockerfile}"
|
INPUT_DOCKERFILE="${INPUT_DOCKERFILE:-Dockerfile}"
|
||||||
|
|
||||||
case "$INPUT_DOCKERFILE" in
|
case "$INPUT_DOCKERFILE" in
|
||||||
Dockerfile|*/Dockerfile|*.dockerfile|*/*.dockerfile)
|
Dockerfile|*/Dockerfile|*.dockerfile|*/*.dockerfile)
|
||||||
# Common dockerfile patterns are allowed
|
# Common dockerfile patterns are allowed
|
||||||
|
# Check for path traversal attempts
|
||||||
|
case "$INPUT_DOCKERFILE" in
|
||||||
|
*/../*|../*|*/..)
|
||||||
|
printf '%s\n' "::error::Dockerfile path contains path traversal: '$INPUT_DOCKERFILE'"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
/*)
|
/*)
|
||||||
echo "::error::Dockerfile path cannot be absolute: '$INPUT_DOCKERFILE'"
|
printf '%s\n' "::error::Dockerfile path cannot be absolute: '$INPUT_DOCKERFILE'"
|
||||||
echo "::error::Use relative paths (e.g., 'Dockerfile', './docker/Dockerfile')"
|
printf '%s\n' "::error::Use relative paths (e.g., 'Dockerfile', './docker/Dockerfile')"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
*://*)
|
*://*)
|
||||||
echo "::error::Dockerfile path cannot be a URL: '$INPUT_DOCKERFILE'"
|
printf '%s\n' "::error::Dockerfile path cannot be a URL: '$INPUT_DOCKERFILE'"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf '%s\n' "::error::Invalid Dockerfile format: '$INPUT_DOCKERFILE'"
|
||||||
|
printf '%s\n' "::error::Must be 'Dockerfile', '*/Dockerfile', '*.dockerfile', or '*/*.dockerfile'"
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo "Input validation completed successfully"
|
printf '%s\n' "Input validation completed successfully"
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1
|
||||||
@@ -223,14 +254,14 @@ runs:
|
|||||||
# Output results
|
# Output results
|
||||||
printf 'image-name=%s\n' "$base_name" >> "$GITHUB_OUTPUT"
|
printf 'image-name=%s\n' "$base_name" >> "$GITHUB_OUTPUT"
|
||||||
{
|
{
|
||||||
echo 'tags<<EOF'
|
printf '%s\n' 'tags<<EOF'
|
||||||
echo "$tags"
|
printf '%s\n' "$tags"
|
||||||
echo 'EOF'
|
printf '%s\n' 'EOF'
|
||||||
} >> "$GITHUB_OUTPUT"
|
} >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
echo "Image name: $base_name"
|
printf 'Image name: %s\n' "$base_name"
|
||||||
echo "Tags:"
|
printf '%s\n' "Tags:"
|
||||||
echo "$tags"
|
printf '%s\n' "$tags"
|
||||||
|
|
||||||
- name: Login to Docker Hub
|
- name: Login to Docker Hub
|
||||||
if: inputs.registry == 'dockerhub' || inputs.registry == 'both'
|
if: inputs.registry == 'dockerhub' || inputs.registry == 'both'
|
||||||
|
|||||||
@@ -288,9 +288,9 @@ runs:
|
|||||||
echo "Detected package manager: $package_manager"
|
echo "Detected package manager: $package_manager"
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version: '22'
|
node-version: '24'
|
||||||
|
|
||||||
- name: Enable Corepack
|
- name: Enable Corepack
|
||||||
shell: sh
|
shell: sh
|
||||||
@@ -457,7 +457,7 @@ runs:
|
|||||||
|
|
||||||
- name: Upload SARIF Report
|
- name: Upload SARIF Report
|
||||||
if: inputs.mode == 'check' && inputs.report-format == 'sarif' && always()
|
if: inputs.mode == 'check' && inputs.report-format == 'sarif' && always()
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
sarif_file: ${{ inputs.working-directory }}/eslint-results.sarif
|
sarif_file: ${{ inputs.working-directory }}/eslint-results.sarif
|
||||||
|
|
||||||
|
|||||||
@@ -414,7 +414,7 @@ runs:
|
|||||||
|
|
||||||
- name: Upload Lint Results
|
- name: Upload Lint Results
|
||||||
if: always() && inputs.report-format == 'sarif'
|
if: always() && inputs.report-format == 'sarif'
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
sarif_file: ${{ inputs.working-directory }}/reports/golangci-lint.sarif
|
sarif_file: ${{ inputs.working-directory }}/reports/golangci-lint.sarif
|
||||||
category: golangci-lint
|
category: golangci-lint
|
||||||
|
|||||||
@@ -121,9 +121,9 @@ runs:
|
|||||||
echo "Detected package manager: $package_manager"
|
echo "Detected package manager: $package_manager"
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version: '22'
|
node-version: '24'
|
||||||
|
|
||||||
- name: Enable Corepack
|
- name: Enable Corepack
|
||||||
shell: sh
|
shell: sh
|
||||||
|
|||||||
@@ -319,7 +319,7 @@ runs:
|
|||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
id: setup-php
|
id: setup-php
|
||||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # 2.35.5
|
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # 2.36.0
|
||||||
with:
|
with:
|
||||||
php-version: ${{ steps.detect-php-version.outputs.detected-version }}
|
php-version: ${{ steps.detect-php-version.outputs.detected-version }}
|
||||||
extensions: ${{ inputs.extensions }}
|
extensions: ${{ inputs.extensions }}
|
||||||
|
|||||||
@@ -54,13 +54,9 @@ runs:
|
|||||||
uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6-beta
|
uses: actions/checkout@71cf2267d89c5cb81562390fa70a37fa40b1305e # v6-beta
|
||||||
with:
|
with:
|
||||||
token: ${{ inputs.token || github.token }}
|
token: ${{ inputs.token || github.token }}
|
||||||
ref: ${{ github.event.pull_request.head.ref || github.head_ref || github.ref_name }}
|
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
# If you use VALIDATE_ALL_CODEBASE = true, you can remove this line to
|
|
||||||
# improve performance
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
# ╭──────────────────────────────────────────────────────────╮
|
# ╭──────────────────────────────────────────────────────────╮
|
||||||
# │ Install packages for linting │
|
# │ Install packages for linting │
|
||||||
# ╰──────────────────────────────────────────────────────────╯
|
# ╰──────────────────────────────────────────────────────────╯
|
||||||
@@ -74,6 +70,29 @@ runs:
|
|||||||
|
|
||||||
if [ -f package.json ]; then
|
if [ -f package.json ]; then
|
||||||
printf '%s\n' "found=true" >> "$GITHUB_OUTPUT"
|
printf '%s\n' "found=true" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
# Check if packageManager field is set (for corepack)
|
||||||
|
if command -v jq >/dev/null 2>&1; then
|
||||||
|
has_package_manager=$(jq -r '.packageManager // empty' package.json 2>/dev/null || printf '')
|
||||||
|
if [ -n "$has_package_manager" ]; then
|
||||||
|
printf '%s\n' "has-package-manager=true" >> "$GITHUB_OUTPUT"
|
||||||
|
printf 'Found packageManager field: %s\n' "$has_package_manager"
|
||||||
|
else
|
||||||
|
printf '%s\n' "has-package-manager=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Fallback: check with grep if jq not available
|
||||||
|
# Use robust pattern to verify non-empty value
|
||||||
|
if grep -q '"packageManager"[[:space:]]*:[[:space:]]*"[^"]\+"' package.json 2>/dev/null; then
|
||||||
|
printf '%s\n' "has-package-manager=true" >> "$GITHUB_OUTPUT"
|
||||||
|
printf '%s\n' "Found packageManager field in package.json"
|
||||||
|
else
|
||||||
|
printf '%s\n' "has-package-manager=false" >> "$GITHUB_OUTPUT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Explicitly set has-package-manager to false when package.json doesn't exist
|
||||||
|
printf '%s\n' "has-package-manager=false" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Detect Package Manager
|
- name: Detect Package Manager
|
||||||
@@ -99,30 +118,35 @@ runs:
|
|||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
if: steps.detect-node.outputs.found == 'true'
|
if: steps.detect-node.outputs.found == 'true'
|
||||||
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version: '22'
|
node-version: '24'
|
||||||
|
|
||||||
- name: Enable Corepack
|
- name: Enable Corepack
|
||||||
if: steps.detect-node.outputs.found == 'true'
|
if: steps.detect-node.outputs.found == 'true' && steps.detect-node.outputs.has-package-manager == 'true'
|
||||||
shell: sh
|
shell: sh
|
||||||
run: |
|
run: |
|
||||||
set -eu
|
set -eu
|
||||||
corepack enable
|
corepack enable
|
||||||
|
printf '%s\n' "Corepack enabled - package manager will be installed automatically from package.json"
|
||||||
|
|
||||||
- name: Install Package Manager
|
- name: Install Package Manager (Fallback)
|
||||||
if: steps.detect-node.outputs.found == 'true'
|
if: steps.detect-node.outputs.found == 'true' && steps.detect-node.outputs.has-package-manager == 'false'
|
||||||
shell: sh
|
shell: sh
|
||||||
env:
|
env:
|
||||||
PACKAGE_MANAGER: ${{ steps.detect-pm.outputs.package-manager }}
|
PACKAGE_MANAGER: ${{ steps.detect-pm.outputs.package-manager }}
|
||||||
run: |
|
run: |
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
|
printf 'No packageManager field found, using detected package manager: %s\n' "$PACKAGE_MANAGER"
|
||||||
|
|
||||||
case "$PACKAGE_MANAGER" in
|
case "$PACKAGE_MANAGER" in
|
||||||
pnpm)
|
pnpm)
|
||||||
|
corepack enable
|
||||||
corepack prepare pnpm@latest --activate
|
corepack prepare pnpm@latest --activate
|
||||||
;;
|
;;
|
||||||
yarn)
|
yarn)
|
||||||
|
corepack enable
|
||||||
corepack prepare yarn@stable --activate
|
corepack prepare yarn@stable --activate
|
||||||
;;
|
;;
|
||||||
bun|npm)
|
bun|npm)
|
||||||
@@ -161,9 +185,14 @@ runs:
|
|||||||
pnpm install --frozen-lockfile
|
pnpm install --frozen-lockfile
|
||||||
;;
|
;;
|
||||||
"yarn")
|
"yarn")
|
||||||
if [ -f ".yarnrc.yml" ]; then
|
# Detect Yarn version by checking actual version output
|
||||||
|
# Yarn 2+ (Berry) uses --immutable, Yarn 1.x (Classic) uses --frozen-lockfile
|
||||||
|
yarn_version=$(yarn --version 2>/dev/null || printf '1.0.0')
|
||||||
|
if printf '%s' "$yarn_version" | grep -q '^[2-9]'; then
|
||||||
|
# Yarn 2+ (Berry) - use --immutable
|
||||||
yarn install --immutable
|
yarn install --immutable
|
||||||
else
|
else
|
||||||
|
# Yarn 1.x (Classic) - use --frozen-lockfile
|
||||||
yarn install --frozen-lockfile
|
yarn install --frozen-lockfile
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
@@ -306,7 +335,7 @@ runs:
|
|||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
if: steps.detect-php.outputs.found == 'true'
|
if: steps.detect-php.outputs.found == 'true'
|
||||||
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # 2.35.5
|
uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # 2.36.0
|
||||||
with:
|
with:
|
||||||
php-version: ${{ steps.php-version.outputs.detected-version }}
|
php-version: ${{ steps.php-version.outputs.detected-version }}
|
||||||
tools: composer
|
tools: composer
|
||||||
@@ -323,7 +352,7 @@ runs:
|
|||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
matcher_path=$(printf '%s' "$RUNNER_TOOL_CACHE/php.json" | tr -d '\n\r')
|
matcher_path=$(printf '%s' "$RUNNER_TOOL_CACHE/php.json" | tr -d '\n\r')
|
||||||
echo "::add-matcher::$matcher_path"
|
printf '%s\n' "::add-matcher::$matcher_path"
|
||||||
|
|
||||||
- name: Install PHP dependencies
|
- name: Install PHP dependencies
|
||||||
if: steps.detect-php.outputs.found == 'true'
|
if: steps.detect-php.outputs.found == 'true'
|
||||||
@@ -349,7 +378,7 @@ runs:
|
|||||||
id: python-version
|
id: python-version
|
||||||
shell: sh
|
shell: sh
|
||||||
env:
|
env:
|
||||||
DEFAULT_VERSION: '3.11'
|
DEFAULT_VERSION: '3.14'
|
||||||
run: |
|
run: |
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
@@ -486,7 +515,7 @@ runs:
|
|||||||
id: go-version
|
id: go-version
|
||||||
shell: sh
|
shell: sh
|
||||||
env:
|
env:
|
||||||
DEFAULT_VERSION: '1.24'
|
DEFAULT_VERSION: '1.25'
|
||||||
run: |
|
run: |
|
||||||
set -eu
|
set -eu
|
||||||
|
|
||||||
@@ -603,7 +632,7 @@ runs:
|
|||||||
- name: MegaLinter
|
- name: MegaLinter
|
||||||
# You can override MegaLinter flavor used to have faster performances
|
# You can override MegaLinter flavor used to have faster performances
|
||||||
# More info at https://megalinter.io/latest/flavors/
|
# More info at https://megalinter.io/latest/flavors/
|
||||||
uses: oxsecurity/megalinter/flavors/cupcake@62c799d895af9bcbca5eacfebca29d527f125a57 # v9.1.0
|
uses: oxsecurity/megalinter/flavors/cupcake@55a59b24a441e0e1943080d4a512d827710d4a9d # v9.2.0
|
||||||
id: ml
|
id: ml
|
||||||
|
|
||||||
# All available variables are described in documentation
|
# All available variables are described in documentation
|
||||||
@@ -621,11 +650,7 @@ runs:
|
|||||||
# github.event_name == 'push' &&
|
# github.event_name == 'push' &&
|
||||||
# contains(fromJSON('["refs/heads/main", "refs/heads/master"]'), github.ref)
|
# contains(fromJSON('["refs/heads/main", "refs/heads/master"]'), github.ref)
|
||||||
# }}
|
# }}
|
||||||
VALIDATE_ALL_CODEBASE: >-
|
VALIDATE_ALL_CODEBASE: false
|
||||||
${{
|
|
||||||
github.event_name == 'push' &&
|
|
||||||
contains(fromJSON('["refs/heads/main", "refs/heads/master"]'), github.ref)
|
|
||||||
}}
|
|
||||||
|
|
||||||
GITHUB_TOKEN: ${{ inputs.token || github.token }}
|
GITHUB_TOKEN: ${{ inputs.token || github.token }}
|
||||||
|
|
||||||
@@ -649,13 +674,6 @@ runs:
|
|||||||
# Uncomment to disable copy-paste and spell checks
|
# Uncomment to disable copy-paste and spell checks
|
||||||
DISABLE: COPYPASTE,SPELL
|
DISABLE: COPYPASTE,SPELL
|
||||||
|
|
||||||
# Export env vars to make them available for subsequent expressions
|
|
||||||
- name: Export Apply Fixes Variables
|
|
||||||
shell: sh
|
|
||||||
run: |
|
|
||||||
echo "APPLY_FIXES_EVENT=pull_request" >> "$GITHUB_ENV"
|
|
||||||
echo "APPLY_FIXES_MODE=commit" >> "$GITHUB_ENV"
|
|
||||||
|
|
||||||
# Upload MegaLinter artifacts
|
# Upload MegaLinter artifacts
|
||||||
- name: Archive production artifacts
|
- name: Archive production artifacts
|
||||||
if: success() || failure()
|
if: success() || failure()
|
||||||
@@ -666,108 +684,3 @@ runs:
|
|||||||
path: |
|
path: |
|
||||||
megalinter-reports
|
megalinter-reports
|
||||||
mega-linter.log
|
mega-linter.log
|
||||||
|
|
||||||
# Set APPLY_FIXES_IF var for use in future steps
|
|
||||||
- name: Set APPLY_FIXES_IF var
|
|
||||||
shell: sh
|
|
||||||
env:
|
|
||||||
APPLY_FIXES_CONDITION: >-
|
|
||||||
${{
|
|
||||||
steps.ml.outputs.has_updated_sources == 1 &&
|
|
||||||
(env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) &&
|
|
||||||
(github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository)
|
|
||||||
}}
|
|
||||||
run: |
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# Sanitize by removing newlines to prevent env var injection
|
|
||||||
sanitized_condition="$(echo "$APPLY_FIXES_CONDITION" | tr -d '\n\r')"
|
|
||||||
printf 'APPLY_FIXES_IF=%s\n' "$sanitized_condition" >> "${GITHUB_ENV}"
|
|
||||||
|
|
||||||
# Set APPLY_FIXES_IF_* vars for use in future steps
|
|
||||||
- name: Set APPLY_FIXES_IF_* vars
|
|
||||||
shell: sh
|
|
||||||
env:
|
|
||||||
APPLY_FIXES_IF_PR_CONDITION: ${{ env.APPLY_FIXES_IF == 'true' && env.APPLY_FIXES_MODE == 'pull_request' }}
|
|
||||||
APPLY_FIXES_IF_COMMIT_CONDITION: ${{ env.APPLY_FIXES_IF == 'true' && env.APPLY_FIXES_MODE == 'commit' && (!contains(fromJSON('["refs/heads/main", "refs/heads/master"]'), github.ref)) }}
|
|
||||||
run: |
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# Sanitize by removing newlines to prevent env var injection
|
|
||||||
sanitized_pr="$(echo "$APPLY_FIXES_IF_PR_CONDITION" | tr -d '\n\r')"
|
|
||||||
sanitized_commit="$(echo "$APPLY_FIXES_IF_COMMIT_CONDITION" | tr -d '\n\r')"
|
|
||||||
|
|
||||||
printf 'APPLY_FIXES_IF_PR=%s\n' "$sanitized_pr" >> "${GITHUB_ENV}"
|
|
||||||
printf 'APPLY_FIXES_IF_COMMIT=%s\n' "$sanitized_commit" >> "${GITHUB_ENV}"
|
|
||||||
|
|
||||||
# Create pull request if applicable
|
|
||||||
# (for now works only on PR from same repository, not from forks)
|
|
||||||
- name: Create Pull Request with applied fixes
|
|
||||||
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9
|
|
||||||
id: cpr
|
|
||||||
if: env.APPLY_FIXES_IF_PR == 'true'
|
|
||||||
with:
|
|
||||||
token: ${{ inputs.token || github.token }}
|
|
||||||
commit-message: 'style: apply linter fixes'
|
|
||||||
title: 'style: apply linter fixes'
|
|
||||||
labels: bot
|
|
||||||
|
|
||||||
- name: Create PR output
|
|
||||||
if: env.APPLY_FIXES_IF_PR == 'true'
|
|
||||||
shell: sh
|
|
||||||
env:
|
|
||||||
PR_NUMBER: ${{ steps.cpr.outputs.pull-request-number }}
|
|
||||||
PR_URL: ${{ steps.cpr.outputs.pull-request-url }}
|
|
||||||
run: |
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
printf 'PR Number - %s\n' "$PR_NUMBER"
|
|
||||||
printf 'PR URL - %s\n' "$PR_URL"
|
|
||||||
|
|
||||||
# Push new commit if applicable
|
|
||||||
# (for now works only on PR from same repository, not from forks)
|
|
||||||
- name: Prepare commit
|
|
||||||
if: env.APPLY_FIXES_IF_COMMIT == 'true'
|
|
||||||
shell: sh
|
|
||||||
env:
|
|
||||||
BRANCH_REF: >-
|
|
||||||
${{
|
|
||||||
github.event.pull_request.head.ref ||
|
|
||||||
github.head_ref ||
|
|
||||||
github.ref_name
|
|
||||||
}}
|
|
||||||
run: |
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
# Fix .git directory ownership after MegaLinter container execution
|
|
||||||
current_uid=$(id -u)
|
|
||||||
sudo chown -Rc "$current_uid" .git/
|
|
||||||
|
|
||||||
# Ensure we're on the correct branch (not in detached HEAD state)
|
|
||||||
# This is necessary because MegaLinter may leave the repo in a detached HEAD state
|
|
||||||
current_branch=$(git rev-parse --abbrev-ref HEAD)
|
|
||||||
if [ "$current_branch" = "HEAD" ]; then
|
|
||||||
echo "Repository is in detached HEAD state, checking out $BRANCH_REF"
|
|
||||||
# Validate branch reference to prevent command injection
|
|
||||||
if ! git check-ref-format --branch "$BRANCH_REF"; then
|
|
||||||
echo "::error::Invalid branch reference format: $BRANCH_REF"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
git checkout "$BRANCH_REF"
|
|
||||||
else
|
|
||||||
echo "Repository is on branch: $current_branch"
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Commit and push applied linter fixes
|
|
||||||
uses: stefanzweifel/git-auto-commit-action@28e16e81777b558cc906c8750092100bbb34c5e3 # v7.0.0
|
|
||||||
if: env.APPLY_FIXES_IF_COMMIT == 'true'
|
|
||||||
with:
|
|
||||||
branch: >-
|
|
||||||
${{
|
|
||||||
github.event.pull_request.head.ref ||
|
|
||||||
github.head_ref ||
|
|
||||||
github.ref
|
|
||||||
}}
|
|
||||||
commit_message: 'style: apply linter fixes'
|
|
||||||
commit_user_name: ${{ inputs.username }}
|
|
||||||
commit_user_email: ${{ inputs.email }}
|
|
||||||
|
|||||||
@@ -274,9 +274,9 @@ runs:
|
|||||||
echo "Detected package manager: $package_manager"
|
echo "Detected package manager: $package_manager"
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
|
||||||
with:
|
with:
|
||||||
node-version: '22'
|
node-version: '24'
|
||||||
|
|
||||||
- name: Enable Corepack
|
- name: Enable Corepack
|
||||||
shell: sh
|
shell: sh
|
||||||
|
|||||||
@@ -370,7 +370,7 @@ runs:
|
|||||||
|
|
||||||
- name: Upload SARIF Report
|
- name: Upload SARIF Report
|
||||||
if: steps.check-files.outputs.result == 'found'
|
if: steps.check-files.outputs.result == 'found'
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
sarif_file: ${{ inputs.working-directory }}/reports/flake8.sarif
|
sarif_file: ${{ inputs.working-directory }}/reports/flake8.sarif
|
||||||
category: 'python-lint'
|
category: 'python-lint'
|
||||||
|
|||||||
@@ -161,14 +161,14 @@ runs:
|
|||||||
|
|
||||||
- name: Upload Trivy results
|
- name: Upload Trivy results
|
||||||
if: steps.verify-sarif.outputs.has_trivy == 'true'
|
if: steps.verify-sarif.outputs.has_trivy == 'true'
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
sarif_file: 'trivy-results.sarif'
|
sarif_file: 'trivy-results.sarif'
|
||||||
category: 'trivy'
|
category: 'trivy'
|
||||||
|
|
||||||
- name: Upload Gitleaks results
|
- name: Upload Gitleaks results
|
||||||
if: steps.verify-sarif.outputs.has_gitleaks == 'true'
|
if: steps.verify-sarif.outputs.has_gitleaks == 'true'
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
sarif_file: 'gitleaks-report.sarif'
|
sarif_file: 'gitleaks-report.sarif'
|
||||||
category: 'gitleaks'
|
category: 'gitleaks'
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ runs:
|
|||||||
|
|
||||||
- name: 🚀 Run stale
|
- name: 🚀 Run stale
|
||||||
id: stale
|
id: stale
|
||||||
uses: actions/stale@5f858e3efba33a5ca4407a664cc011ad407f2008 # v10.1.0
|
uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # v10.1.1
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ inputs.token || github.token }}
|
repo-token: ${{ inputs.token || github.token }}
|
||||||
days-before-stale: ${{ inputs.days-before-stale }}
|
days-before-stale: ${{ inputs.days-before-stale }}
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ runs:
|
|||||||
|
|
||||||
- name: Upload SARIF Report
|
- name: Upload SARIF Report
|
||||||
if: steps.check-files.outputs.found == 'true' && inputs.format == 'sarif'
|
if: steps.check-files.outputs.found == 'true' && inputs.format == 'sarif'
|
||||||
uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5
|
uses: github/codeql-action/upload-sarif@cf1bb45a277cb3c205638b2cd5c984db1c46a412 # v4.31.7
|
||||||
with:
|
with:
|
||||||
sarif_file: ${{ env.VALIDATED_WORKING_DIR }}/reports/tflint.sarif
|
sarif_file: ${{ env.VALIDATED_WORKING_DIR }}/reports/tflint.sarif
|
||||||
category: terraform-lint
|
category: terraform-lint
|
||||||
|
|||||||
Reference in New Issue
Block a user