mirror of
https://github.com/fleetdm/fleet
synced 2026-05-24 01:18:42 +00:00
For #28837. Fixing this all of this because we got multiple reports from the community and customers and these were also detected by Amazon Inspector. - Fixes CVE-2025-22871 by upgrading Go from 1.24.1 to 1.24.2. - `docker scout` now fails the daily scheduled action if there are CRITICAL,HIGH CVEs (we missed setting `exit-code: true`). - Report CVE-2025-46569 as not affected by it because of our use of OPA's go package. - Report CVE-2024-8260 as not affected by it because Fleet doesn't run on Windows. - The `security/status.md` shows a lot of changes because we are now sorting CVEs so that newest come first. --- - [X] Changes file added for user-visible changes in `changes/`, `orbit/changes/` or `ee/fleetd-chrome/changes`. See [Changes files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/Committing-Changes.md#changes-files) for more information. - [ ] Manual QA for all new/changed functionality - For Orbit and Fleet Desktop changes: - [ ] Make sure fleetd is compatible with the latest released version of Fleet (see [Must rule](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/fleetd-development-and-release-strategy.md)). - [ ] Orbit runs on macOS, Linux and Windows. Check if the orbit feature/bugfix should only apply to one platform (`runtime.GOOS`). - [ ] Manual QA must be performed in the three main OSs, macOS, Windows and Linux. - [ ] Auto-update manual QA, from released version of component to new version (see [tools/tuf/test](../tools/tuf/test/README.md)). - [ ] For unreleased bug fixes in a release candidate, confirmed that the fix is not expected to adversely impact load test results or alerted the release DRI if additional load testing is needed.
178 lines
No EOL
6.6 KiB
YAML
178 lines
No EOL
6.6 KiB
YAML
name: Docker publish
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- "main"
|
|
- "rc-minor-*"
|
|
- "rc-patch-*"
|
|
paths-ignore:
|
|
- "handbook/**"
|
|
- "website/**"
|
|
- "mdm-profiles/**"
|
|
pull_request:
|
|
paths-ignore:
|
|
- "handbook/**"
|
|
- "website/**"
|
|
- "mdm-profiles/**"
|
|
workflow_dispatch: # Manual
|
|
schedule:
|
|
- cron: '0 4 * * *' # Every day at 4 AM
|
|
|
|
# This allows a subsequently queued workflow run to interrupt previous runs
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id}}
|
|
cancel-in-progress: true
|
|
|
|
defaults:
|
|
run:
|
|
# fail-fast using bash -eo pipefail. See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#exit-codes-and-error-action-preference
|
|
shell: bash
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
publish:
|
|
# Only run it when the push is to the fleetdm/fleet repo. Otherwise the secrets for pushing to
|
|
# Docker will not be available.
|
|
#
|
|
# Also not run if author is dependabot (it doesn't have access to Github secrets).
|
|
if: ${{ (github.repository == 'fleetdm/fleet') && (github.actor != 'dependabot[bot]') }}
|
|
runs-on: ubuntu-22.04
|
|
environment: Docker Hub
|
|
steps:
|
|
- name: Harden Runner
|
|
uses: step-security/harden-runner@63c24ba6bd7ba022e95695ff85de572c04a18142 # v2.7.0
|
|
with:
|
|
egress-policy: audit
|
|
|
|
- name: Checkout
|
|
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
|
|
|
|
- name: Login to Docker Hub
|
|
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0
|
|
with:
|
|
go-version-file: "go.mod"
|
|
|
|
# Set the Node.js version
|
|
- name: Set up Node.js
|
|
uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1
|
|
with:
|
|
node-version-file: package.json
|
|
|
|
- name: Install Dependencies
|
|
run: make deps
|
|
|
|
- name: Run GoReleaser
|
|
uses: goreleaser/goreleaser-action@90a3faa9d0182683851fbfa97ca1a2cb983bfca3 # v6.2.1
|
|
with:
|
|
distribution: goreleaser-pro
|
|
version: "~> 2"
|
|
args: release --snapshot --clean -f .goreleaser-snapshot.yml
|
|
env:
|
|
GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}
|
|
|
|
- name: Tag image with branch name
|
|
run: docker tag fleetdm/fleet:$(git rev-parse --short HEAD) fleetdm/fleet:$(git rev-parse --abbrev-ref HEAD)
|
|
|
|
- name: Generate tag
|
|
id: generate_tag
|
|
run: |
|
|
echo "FLEET_IMAGE_TAG=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_OUTPUT
|
|
|
|
- name: List VEX files
|
|
id: generate_vex_files
|
|
run: |
|
|
echo "VEX_FILES=$(ls -1 ./security/vex/fleet/ | while IFS= read -r line; do echo "./security/vex/fleet/$line"; done | tr '\n' ',' | sed 's/.$//')" >> $GITHUB_OUTPUT
|
|
|
|
# We use the trivy command and not the github action because it doesn't support loading VEX files yet.
|
|
- name: Check high/critical vulnerabilities before publishing (trivy)
|
|
# Only run this on the schedule run or when tagging RCs.
|
|
if: startsWith(github.ref, 'rc-minor-') || startsWith(github.ref, 'rc-patch-') || github.event.schedule == '0 4 * * *'
|
|
env:
|
|
TRIVY_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-db
|
|
TRIVY_JAVA_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-java-db
|
|
run: |
|
|
mkdir trivy-download
|
|
cd trivy-download
|
|
curl -L https://github.com/aquasecurity/trivy/releases/download/v0.61.0/trivy_0.61.0_Linux-64bit.tar.gz --output trivy_0.61.0_Linux-64bit.tar.gz
|
|
tar -xf trivy_0.61.0_Linux-64bit.tar.gz
|
|
mv trivy ..
|
|
cd ..
|
|
chmod +x ./trivy
|
|
./trivy image \
|
|
--ignore-unfixed \
|
|
--exit-code=1 \
|
|
--pkg-types=os,library \
|
|
--severity=HIGH,CRITICAL \
|
|
--vex="${{ steps.generate_vex_files.outputs.VEX_FILES }}" \
|
|
fleetdm/fleet:${{ steps.generate_tag.outputs.FLEET_IMAGE_TAG }}
|
|
|
|
- name: Check high/critical vulnerabilities before publishing (docker scout)
|
|
# Only run this on the schedule run or when tagging RCs.
|
|
if: startsWith(github.ref, 'rc-minor-') || startsWith(github.ref, 'rc-patch-') || github.event.schedule == '0 4 * * *'
|
|
uses: docker/scout-action@381b657c498a4d287752e7f2cfb2b41823f566d9 # v1.17.1
|
|
with:
|
|
command: cves
|
|
image: fleetdm/fleet:${{ steps.generate_tag.outputs.FLEET_IMAGE_TAG }}
|
|
only-severities: critical,high
|
|
only-fixed: true
|
|
only-vex-affected: true
|
|
write-comment: false
|
|
vex-location: ./security/vex/fleet
|
|
exit-code: true
|
|
|
|
# Explicitly push the docker images as GoReleaser will not do so in snapshot mode
|
|
- name: Publish Docker images
|
|
run: docker push fleetdm/fleet --all-tags
|
|
|
|
- name: Get tags
|
|
run: |
|
|
echo "TAG=$(git rev-parse --abbrev-ref HEAD) $(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
|
id: docker
|
|
|
|
- name: List tags for push
|
|
run: |
|
|
echo "The following TAGs are to be pushed: ${{ steps.docker.outputs.TAG }}"
|
|
|
|
- name: Login to quay.io
|
|
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
|
|
with:
|
|
registry: quay.io
|
|
username: fleetdm+fleetreleaser
|
|
password: ${{ secrets.QUAY_REGISTRY_PASSWORD }}
|
|
|
|
- name: Tag and push to quay.io
|
|
run: |
|
|
for TAG in ${{ steps.docker.outputs.TAG }}; do
|
|
docker tag fleetdm/fleet:${TAG} quay.io/fleetdm/fleet:${TAG}
|
|
docker push quay.io/fleetdm/fleet:${TAG}
|
|
done
|
|
|
|
- name: Slack notification
|
|
if: github.event.schedule == '0 4 * * *' && failure()
|
|
uses: slackapi/slack-github-action@e28cf165c92ffef168d23c5c9000cffc8a25e117 # v1.24.0
|
|
with:
|
|
payload: |
|
|
{
|
|
"text": "${{ job.status }}\n${{ github.event.pull_request.html_url || github.event.head.html_url }}",
|
|
"blocks": [
|
|
{
|
|
"type": "section",
|
|
"text": {
|
|
"type": "mrkdwn",
|
|
"text": "⚠️ Docker publish failed.\nhttps://github.com/fleetdm/fleet/actions/runs/${{ github.run_id }}"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
env:
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_G_HELP_ENGINEERING_WEBHOOK_URL }}
|
|
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK |