Repository navigation
Sp26 updates - #25
Sp26 updates#25
Conversation
…environment variable
There was a problem hiding this comment.
Pull request overview
Updates the resume content and modernizes the repo’s release/CI supply-chain posture (artifact zipping, provenance attestation, image signing/SBOM), alongside a dependency lockfile refresh.
Changes:
- Refresh
resume.json(role/title, summary, links, experience bullets, and skills taxonomy). - Add README documentation for SLSA v3 / keyless signing verification steps.
- Extend CI/release automation (artifact zipping + provenance attestation) and update the CI container image build/sign flow; add semantic-release config in
package.jsonand update dependencies/lockfile.
Reviewed changes
Copilot reviewed 6 out of 7 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| resume.json | Updates resume content (basics, work highlights, skills categories) and adds GitHub profile. |
| README.md | Adds supply-chain security (SLSA v3) section and verification commands. |
| package.json | Introduces semantic-release config for GitHub release assets (zip + SBOM files). |
| package-lock.json | Large dependency tree update consistent with the package.json/config changes. |
| Dockerfile | Switches to a multi-stage build and Wolfi-based runtime with additional tooling (zip/git/bash) and nonroot user. |
| .github/workflows/ci.yml | Updates action versions, adds artifact zipping/upload, and adds provenance attestation + SBOM generation in release. |
| .github/workflows/build-push-ci-image.yml | Updates buildx/QEMU/login actions, adds SBOM/provenance, and signs the pushed image with cosign. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| if git rev-parse HEAD~1 >/dev/null 2>&1; then | ||
| # Check for changes in specific files between HEAD~1 and HEAD | ||
| DIFF=$(git diff --name-only HEAD~1 HEAD | grep -E '^(Dockerfile|package.json|package-lock.json)$' || true) | ||
| DIFF=$(git diff --name-only HEAD~1 HEAD | grep -E '^(Dockerfile|package.json|package-lock.json|build-push-ci-image.yml)$' || true) |
There was a problem hiding this comment.
The Docker-change detector greps for build-push-ci-image.yml at the repo root, but the workflow file lives under .github/workflows/. As written, edits to .github/workflows/build-push-ci-image.yml won’t flip CHANGED to true, so the CI image may not rebuild when this workflow changes. Update the grep to match the correct path (and/or use a path-based filter action).
| DIFF=$(git diff --name-only HEAD~1 HEAD | grep -E '^(Dockerfile|package.json|package-lock.json|build-push-ci-image.yml)$' || true) | |
| DIFF=$(git diff --name-only HEAD~1 HEAD | grep -E '^(Dockerfile|package.json|package-lock.json|\.github/workflows/build-push-ci-image\.yml)$' || true) |
| "release": { | ||
| "plugins": [ | ||
| "@semantic-release/commit-analyzer", | ||
| "@semantic-release/release-notes-generator", | ||
| "@semantic-release/changelog", | ||
| [ | ||
| "@semantic-release/github", | ||
| { | ||
| "assets": [ | ||
| {"path": "resume-artifacts.zip", "label": "Resume Artifacts (ZIP)"}, | ||
| {"path": "sbom.spdx.json", "label": "Container Image SBOM (SPDX)"}, | ||
| {"path": "sbom.cyclonedx.json", "label": "Container Image SBOM (CycloneDX)"} | ||
| ] | ||
| } | ||
| ], | ||
| "@semantic-release/git" | ||
| ] | ||
| }, |
There was a problem hiding this comment.
This adds a release config to package.json, but the repo already has a .releaserc semantic-release configuration. semantic-release will load only one config source; adding release here can unintentionally override the existing .releaserc settings (e.g., branches: ["main"] and the configured @semantic-release/git message/assets), potentially breaking releases. Consolidate semantic-release config into a single place (either keep .releaserc and remove this block, or migrate the full config here).
| "release": { | |
| "plugins": [ | |
| "@semantic-release/commit-analyzer", | |
| "@semantic-release/release-notes-generator", | |
| "@semantic-release/changelog", | |
| [ | |
| "@semantic-release/github", | |
| { | |
| "assets": [ | |
| {"path": "resume-artifacts.zip", "label": "Resume Artifacts (ZIP)"}, | |
| {"path": "sbom.spdx.json", "label": "Container Image SBOM (SPDX)"}, | |
| {"path": "sbom.cyclonedx.json", "label": "Container Image SBOM (CycloneDX)"} | |
| ] | |
| } | |
| ], | |
| "@semantic-release/git" | |
| ] | |
| }, |
| @@ -13,11 +13,35 @@ | |||
|  | |||
| [](LICENSE) | |||
| [](https://github.com/dependabot) | |||
There was a problem hiding this comment.
Typo in the badge label: Securtiy should be Security to avoid publishing a misspelled badge in the README.
| [](https://github.com/dependabot) | |
| [](https://github.com/dependabot) |
|
|
||
| This project embraces zero-trust and secure-by-default architecture. All release artifacts and container images are cryptographically signed and attested to meet **SLSA Level 3** capabilities entirely via GitHub Actions. | ||
|
|
||
| * **Keyless Signing:** The official builder image (`ghcr.io/northcutted/resume-ci`) is signed with Sigstore/Cosign via GitHub Action's OIDC identity. |
There was a problem hiding this comment.
Grammar: “GitHub Action's OIDC identity” should be “GitHub Actions' OIDC identity” (plural possessive) since it refers to GitHub Actions as a product.
| * **Keyless Signing:** The official builder image (`ghcr.io/northcutted/resume-ci`) is signed with Sigstore/Cosign via GitHub Action's OIDC identity. | |
| * **Keyless Signing:** The official builder image (`ghcr.io/northcutted/resume-ci`) is signed with Sigstore/Cosign via GitHub Actions' OIDC identity. |
| "**JVM Middleware Innovation:** Delivered a tool integrated into base image designed to optimize heap sizing and garbage collection for JVM applications on Kubernetes, significantly improving stability and reducing cognitive load for teams migrating from legacy platforms.", | ||
| "**Security Automation:** Slashed vulnerability remediation time to **under 24 hours** (down from days) by implementing automated patching pipelines.", | ||
| "**Enterprise Scale & Adoption:** Scaled adoption from zero to over **700 unique applications** leveraging official enterprise container images in 2025, used in over **100,000 image builds**.", | ||
| "**Distroless & Multi-Runtime Platform:** Designed and maintain distroless base images comparable to Google's distroless offering, drastically reducing the attack surface. Built on Amazon Linux 2023 libraries for broad compatibility. Expanded runtime support to include **Java/JVM, Javascript/Typescript, Python, Go and .NET**, delivering a secure-by-default multi-runtime image ecosystem.", |
There was a problem hiding this comment.
Grammar agreement: “Designed and maintain distroless base images …” should be either present tense (“Design and maintain …”) or past tense (“Designed and maintained …”) for consistency.
| "**Distroless & Multi-Runtime Platform:** Designed and maintain distroless base images comparable to Google's distroless offering, drastically reducing the attack surface. Built on Amazon Linux 2023 libraries for broad compatibility. Expanded runtime support to include **Java/JVM, Javascript/Typescript, Python, Go and .NET**, delivering a secure-by-default multi-runtime image ecosystem.", | |
| "**Distroless & Multi-Runtime Platform:** Designed and maintained distroless base images comparable to Google's distroless offering, drastically reducing the attack surface. Built on Amazon Linux 2023 libraries for broad compatibility. Expanded runtime support to include **Java/JVM, Javascript/Typescript, Python, Go and .NET**, delivering a secure-by-default multi-runtime image ecosystem.", |
| # Builder stage to download and extract Pandoc binary securely | ||
| FROM alpine:3.19 AS builder | ||
| ARG PANDOC_VERSION | ||
| ARG TARGETARCH | ||
|
|
||
| RUN apt-get update && apt-get install -y --no-install-recommends \ | ||
| RUN apk add --no-cache curl tar gzip | ||
|
|
||
| RUN if [ "$TARGETARCH" = "arm64" ]; then ARCH="arm64"; else ARCH="amd64"; fi && \ | ||
| curl -L https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-linux-${ARCH}.tar.gz -o /tmp/pandoc.tar.gz && \ | ||
| tar -xzf /tmp/pandoc.tar.gz -C /tmp && \ | ||
| mv /tmp/pandoc-${PANDOC_VERSION}/bin/pandoc /usr/bin/pandoc |
There was a problem hiding this comment.
The comment says the Pandoc download/extract is done “securely”, but the build does not verify the downloaded artifact (checksum/signature) and curl doesn’t fail the build on HTTP errors by default. Consider adding --fail --show-error and verifying a published SHA256 (or Sigstore verification) before installing the binary, or reword the comment to avoid overstating security.
| - name: Install Cosign | ||
| uses: sigstore/cosign-installer@v4.1.1 | ||
| - name: Login to DockerHub | ||
| uses: docker/login-action@v3 | ||
| uses: docker/login-action@v4 | ||
| with: | ||
| registry: ghcr.io | ||
| username: ${{ github.actor }} | ||
| password: ${{ secrets.GITHUB_TOKEN }} |
There was a problem hiding this comment.
Step name is misleading: this logs into GitHub Container Registry (ghcr.io), not DockerHub. Rename the step to avoid confusion when debugging auth issues.
|
🎉 This PR is included in version 2.6.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
No description provided.