Skip to content

Commit f29a545

Browse files
authored
Merge branch 'main' into feat/1486-repo-date-fields-migration
2 parents 591ce50 + 449f35b commit f29a545

212 files changed

Lines changed: 15180 additions & 13236 deletions

File tree

Some content is hidden

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

.github/workflows/cve.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: CVE Scanning
2+
3+
permissions:
4+
contents: read
5+
6+
on:
7+
push:
8+
branches: ['main']
9+
pull_request:
10+
branches: ['main']
11+
schedule:
12+
- cron: '0 6 * * 1' # Weekly Monday 6am UTC
13+
14+
jobs:
15+
grype:
16+
name: Grype dependency scan
17+
runs-on: ubuntu-latest
18+
permissions:
19+
contents: read
20+
security-events: write
21+
steps:
22+
- name: Harden Runner
23+
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
24+
with:
25+
egress-policy: audit
26+
27+
- name: Checkout
28+
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
29+
30+
- name: Install Grype
31+
id: grype
32+
uses: anchore/scan-action/download-grype@e1165082ffb1fe366ebaf02d8526e7c4989ea9d2 # v7
33+
with:
34+
cache-db: true
35+
36+
- name: Scan (table)
37+
run: |
38+
${{ steps.grype.outputs.cmd }} dir:. \
39+
--config .grype.yaml \
40+
--output template
41+
42+
- name: Scan (SARIF)
43+
if: ${{ always() }}
44+
run: |
45+
${{ steps.grype.outputs.cmd }} dir:. \
46+
--config .grype.yaml \
47+
--output sarif --file grype-results.sarif || true
48+
49+
- name: Upload SARIF report
50+
if: ${{ always() }}
51+
uses: github/codeql-action/upload-sarif@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4
52+
with:
53+
sarif_file: grype-results.sarif

.github/workflows/dependency-review.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@ jobs:
2323
fail-on-severity: high
2424
allow-licenses: MIT, MIT-0, Apache-2.0, BSD-3-Clause, BSD-3-Clause-Clear, ISC, BSD-2-Clause, Unlicense, CC0-1.0, 0BSD, X11, MPL-2.0, MPL-1.0, MPL-1.1, MPL-2.0, OFL-1.1, Zlib, BlueOak-1.0.0, LicenseRef-scancode-dco-1.1, Ubuntu-font-1.0, Artistic-2.0, Python-2.0, EPL-2.0
2525
fail-on-scopes: development, runtime
26-
allow-dependencies-licenses: 'pkg:npm/caniuse-lite, pkg:npm/path-is-inside, pkg:npm/unicode-match-property-value-ecmascript, pkg:npm/unicode-property-aliases-ecmascript, pkg:npm/uri-js'
26+
allow-dependencies-licenses: 'pkg:npm/caniuse-lite, pkg:npm/path-is-inside, pkg:npm/unicode-match-property-value-ecmascript, pkg:npm/unicode-property-aliases-ecmascript, pkg:npm/uri-js, pkg:npm/bowser, pkg:npm/focus-visible, pkg:npm/spdx-exceptions'

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
fetch-depth: 0
3030

3131
- name: Install Dependencies
32-
run: npm ci --workspaces
32+
run: npm ci
3333

3434
- name: Code Linting
3535
run: |

.github/workflows/unused-dependencies.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
node-version: '24.x'
2222
- name: 'Run depcheck'
2323
run: |
24-
npx depcheck --skip-missing --ignores="tsx,@babel/*,@commitlint/*,eslint,eslint-*,husky,ts-node,concurrently,nyc,prettier,typescript,tsconfig-paths,vite-tsconfig-paths,quicktype,history,@types/domutils,@vitest/coverage-v8,cross-env,c8"
24+
npx depcheck --skip-missing --ignores="tsx,@babel/*,@commitlint/*,eslint,eslint-*,husky,ts-node,concurrently,nyc,prettier,typescript,tsconfig-paths,vite-tsconfig-paths,quicktype,history,@types/domutils,@vitest/coverage-v8,cross-env,c8,tailwindcss,react-is"
2525
echo $?
2626
if [[ $? == 1 ]]; then
2727
echo "Unused dependencies or devDependencies found"

.grype-report.tmpl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{{printf "%-8s | %-19s | %-50s | %-15s | %s" "SEVERITY" "ADVISORY" "PACKAGE" "FIXED IN" "SOURCE"}}
2+
{{printf "%-8s | %-19s | %-50s | %-15s | %s" "--------" "-------------------" "--------------------------------------------------" "---------------" "------"}}
3+
{{- range .Matches -}}
4+
{{- $loc := "" -}}{{- range .Artifact.Locations -}}{{- $loc = .RealPath -}}{{- end}}
5+
{{printf "%-8s | %-19s | %-50s | %-15s | %s" .Vulnerability.Severity .Vulnerability.ID (printf "%s@%s" .Artifact.Name .Artifact.Version) (join ", " .Vulnerability.Fix.Versions) $loc}}
6+
{{- end}}

.grype.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
fail-on-severity: high
2+
sort-by: severity
3+
output-template-file: .grype-report.tmpl
4+
5+
ignore:
6+
- fix-state: 'wont-fix'
7+
- fix-state: 'not-fixed'
8+
9+
# Comment out to include scanning experimental license inventory
10+
exclude:
11+
- './experimental/**'

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,7 @@ This file is the canonical project guide. Tool-specific entry points:
383383

384384
- **Delegate everything:** Use the Task tool with specialized subagents for all research, code exploration, code writing, testing, and analysis. The main agent should plan, coordinate, and summarize — not do the work itself.
385385
- **Maximize parallelism:** Launch multiple subagents concurrently whenever their tasks are independent. For example, when exploring code patterns AND analyzing tests AND checking dependencies, spawn all three agents in a single message rather than sequentially. Always send independent Task calls in a **single message** with multiple tool-use blocks.
386+
386387
<!-- - **Use the right agent type:** Pick `Explore` for codebase search/understanding, `Plan` for architecture decisions, `Bash` for commands, and specialized agents (e.g., `code-reviewer`, `test-automator`, `debugger`) when they match the task.
387388
- **Keep the main context clean:** Offload large file reads, multi-file searches, and deep analysis to subagents so the main conversation stays focused on coordination and user communication.
388389
- **Hooks run automatically — use subagents to respond:** When a hook (Spotless, build verification, code review, or simplification) reports an issue, delegate the fix to a subagent rather than doing it inline. If multiple hooks fail simultaneously, spawn parallel subagents to address each issue concurrently. -->

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
<a href="https://github.com/finos/git-proxy">
44
<img src="./website/static/img/logo.png" alt="Logo" height="95">
55
</a>
6-
6+
77
<br />
88
<br />
9-
9+
1010
<p align="center">
1111
Deploy custom push protections and policies<br />on top of Git
1212
<br />

cypress/e2e/autoApproved.cy.js

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
* limitations under the License.
1515
*/
1616

17-
import moment from 'moment';
18-
1917
describe('Auto-Approved Push Test', () => {
2018
beforeEach(() => {
2119
cy.login('admin', 'admin');
@@ -55,34 +53,23 @@ describe('Auto-Approved Push Test', () => {
5553
},
5654
],
5755
attestation: {
58-
timestamp: '2023-10-01T12:00:00Z',
59-
autoApproved: true,
56+
timestamp: 1696161600000,
57+
reviewer: {
58+
username: 'system',
59+
displayName: '',
60+
},
6061
},
6162
},
6263
}).as('getPush');
6364
});
6465

65-
it('should display auto-approved message and verify tooltip contains the expected timestamp', () => {
66+
it('should display auto-approved message', () => {
6667
cy.visit('/dashboard/push/123');
6768

6869
cy.wait('@getPush');
6970

7071
cy.contains('Auto-approved by system').should('be.visible');
7172

72-
cy.get('svg.MuiSvgIcon-root')
73-
.filter((_, el) => getComputedStyle(el).fill === 'rgb(0, 128, 0)')
74-
.invoke('attr', 'style')
75-
.should('include', 'cursor: default')
76-
.and('include', 'opacity: 0.5');
77-
78-
const expectedTooltipTimestamp = moment('2023-10-01T12:00:00Z')
79-
.local()
80-
.format('dddd, MMMM Do YYYY, h:mm:ss a');
81-
82-
cy.get('kbd').trigger('mouseover');
83-
84-
cy.get('.MuiTooltip-tooltip').should('contain', expectedTooltipTimestamp);
85-
8673
cy.contains('approved this contribution').should('not.exist');
8774
});
8875
});

cypress/e2e/docker/pushActions.cy.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ describe('Push Actions (Approve, Reject, Cancel)', () => {
126126
cy.get('[data-testid="push-reject-confirm-btn"]').should('be.disabled');
127127

128128
// Fill in rejection reason
129-
cy.get('#reason').type('Rejecting for test purposes');
129+
cy.get('#push-reject-reason').type('Rejecting for test purposes');
130130

131131
// Confirm button should now be enabled
132132
cy.get('[data-testid="push-reject-confirm-btn"]').should('not.be.disabled');

0 commit comments

Comments
 (0)