-
Notifications
You must be signed in to change notification settings - Fork 36
Add automated security scanning workflows #124
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 10 commits
9b0ab3a
351ea5c
980a039
9f26520
9e22e3a
9c091a9
d3b966a
949cdba
6b8d181
c3339da
2a40050
4769896
ad4db42
0f66771
4bac609
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
name: OpenSSF Scorecard | ||
|
||
on: | ||
branch_protection_rule: | ||
schedule: | ||
# Run weekly on Wednesdays at 7:27 UTC | ||
- cron: "27 7 * * 3" | ||
push: | ||
branches: | ||
- main | ||
|
||
permissions: read-all | ||
|
||
jobs: | ||
analysis: | ||
name: Scorecard analysis | ||
runs-on: ubuntu-latest | ||
permissions: | ||
security-events: write | ||
id-token: write | ||
|
||
steps: | ||
- name: Checkout code | ||
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 | ||
deansheather marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
with: | ||
persist-credentials: false | ||
|
||
- name: Run analysis | ||
uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 | ||
deansheather marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
with: | ||
results_file: results.sarif | ||
results_format: sarif | ||
repo_token: ${{ secrets.GITHUB_TOKEN }} | ||
publish_results: true | ||
|
||
- name: Upload artifact | ||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | ||
with: | ||
name: SARIF file | ||
path: results.sarif | ||
retention-days: 5 | ||
|
||
- name: Upload to code-scanning | ||
uses: github/codeql-action/upload-sarif@755f44910c12a3d7ca0d8c6e42c048b3362f7cec # v3.30.8 | ||
with: | ||
sarif_file: results.sarif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
name: security | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
schedule: | ||
# Run every day at 10:00 UTC (6:00 AM ET / 3:00 AM PT) | ||
- cron: "0 10 * * *" | ||
workflow_dispatch: | ||
|
||
permissions: | ||
contents: read | ||
|
||
# Cancel in-progress runs for pull requests when developers push | ||
# additional changes | ||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.ref }} | ||
cancel-in-progress: ${{ github.event_name == 'pull_request' }} | ||
|
||
jobs: | ||
codeql: | ||
name: CodeQL Analysis | ||
runs-on: ubuntu-latest | ||
permissions: | ||
security-events: write | ||
actions: read | ||
contents: read | ||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 | ||
|
||
- name: Setup Go | ||
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0 | ||
with: | ||
go-version-file: "go.mod" | ||
|
||
- name: Initialize CodeQL | ||
uses: github/codeql-action/init@755f44910c12a3d7ca0d8c6e42c048b3362f7cec # v3.30.8 | ||
with: | ||
languages: go | ||
|
||
- name: Perform CodeQL Analysis | ||
uses: github/codeql-action/analyze@755f44910c12a3d7ca0d8c6e42c048b3362f7cec # v3.30.8 | ||
with: | ||
category: "/language:go" | ||
|
||
trivy: | ||
name: Trivy Docker Image Scan | ||
runs-on: ubuntu-latest | ||
permissions: | ||
security-events: write | ||
contents: read | ||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 | ||
deansheather marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
|
||
- name: Setup Go | ||
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0 | ||
with: | ||
go-version-file: "go.mod" | ||
|
||
- name: Build binary for linux/amd64 | ||
run: make build/linux/amd64 | ||
|
||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # v3.11.1 | ||
|
||
- name: Build Docker image | ||
id: build | ||
run: | | ||
docker buildx bake \ | ||
-f ./docker-bake.hcl \ | ||
--set "*.platform=linux/amd64" \ | ||
--set "*.tags=code-marketplace:scan" \ | ||
--load | ||
echo "image=code-marketplace:scan" >> "$GITHUB_OUTPUT" | ||
- name: Run Trivy vulnerability scanner (table output for logs) | ||
uses: aquasecurity/trivy-action@915b19bbe73b92a6cf82a1bc12b087c9a19a5fe2 # 0.28.0 | ||
deansheather marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
with: | ||
image-ref: ${{ steps.build.outputs.image }} | ||
format: "table" | ||
severity: "LOW,MEDIUM,HIGH,CRITICAL" | ||
|
||
- name: Run Trivy vulnerability scanner (SARIF output for GitHub) | ||
uses: aquasecurity/trivy-action@915b19bbe73b92a6cf82a1bc12b087c9a19a5fe2 # 0.28.0 | ||
deansheather marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
with: | ||
image-ref: ${{ steps.build.outputs.image }} | ||
format: "sarif" | ||
output: "trivy-results.sarif" | ||
severity: "LOW,MEDIUM,HIGH,CRITICAL" | ||
|
||
- name: Upload Trivy scan results to GitHub Security tab | ||
uses: github/codeql-action/upload-sarif@755f44910c12a3d7ca0d8c6e42c048b3362f7cec # v3.30.8 | ||
with: | ||
sarif_file: "trivy-results.sarif" | ||
category: "Trivy" | ||
|
||
- name: Upload Trivy scan results as artifact | ||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | ||
with: | ||
name: trivy-results | ||
path: trivy-results.sarif | ||
retention-days: 7 |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -27,6 +27,11 @@ upload: | |||||
|
||||||
TAG=$(shell git describe --always) | ||||||
|
||||||
build/linux/amd64: | ||||||
|
build/linux/amd64: | |
bin/coder-marketplace-linux-amd64: |
You can keep the PHONY (after editing the target name) for simplicity's sake though, otherwise you'll need to specify every Go-related file as a dependency
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
would it be better to leave PHONY or to use a pattern like one of the following to ensure Make can still optimize by not building if no Go files change?
bin/code-marketplace-linux-amd64: $(wildcard **/*.go) go.mod go.sum
If you think leaving PHONY is simpler and cleaner then I am open just like using Make to optimize builds even in small repos like this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you want to do it you'll probably have to use shell find
cuz I don't think make's wildcard
is very good. But it's probably fine to just leave it as PHONY for this PR
deansheather marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You could maybe just put a $(shell mkdir -p bin)
at the top of the file (not in a target) to avoid having to duplicate it in every target
Uh oh!
There was an error while loading. Please reload this page.