Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
83319c2
add zizmor
vszakats Oct 23, 2025
7f79fee
fixup EOLs at EOF
vszakats Oct 23, 2025
a0655fc
say why we need `packages: write` permissions
vszakats Oct 23, 2025
1fc9167
avoid GH macros in shell code
vszakats Oct 23, 2025
6a4989e
avoid GH macros in shell code 2
vszakats Oct 23, 2025
bddbe79
build_master_dev.yml drop redundant cosign privkey save step
vszakats Oct 23, 2025
5a3439a
avoid GH macros in shell code 3
vszakats Oct 23, 2025
e1f9f82
build_master_dev.yml drop redundant cosign pubkey save step
vszakats Oct 23, 2025
1dad046
add spellchecker: typos
vszakats Oct 23, 2025
329aa99
fix typos
vszakats Oct 23, 2025
ae51d6e
fix some issues reported by yamllint
vszakats Oct 23, 2025
e2ce196
fix some issues reported by yamllint 2
vszakats Oct 23, 2025
8e83308
fix some issues reported by yamllint 3
vszakats Oct 23, 2025
ca20822
whitespace
vszakats Oct 23, 2025
a612a78
whitespace 2
vszakats Oct 23, 2025
59476a0
drop cosign.pub steps, the pubkey is in the git repo root
vszakats Oct 23, 2025
5e51edc
01-design.md: replace UTF-8 line-drawing chars with ASCII-7
vszakats Oct 23, 2025
a1ec89f
checksrc.yml cleanup
vszakats Oct 23, 2025
1523e3b
try using grype and trivy from Linuxbrew
vszakats Oct 23, 2025
e82cbc8
make GHA macro formatting consistent
vszakats Oct 23, 2025
2bde59a
make GHA macro formatting consistent 2
vszakats Oct 23, 2025
4d9c27e
make CI jobs testable without docker hub/quay login creds
vszakats Oct 23, 2025
f26fdd8
try something
vszakats Oct 24, 2025
fd57f87
cleanup
vszakats Oct 24, 2025
a12b36e
cleanup-2
vszakats Oct 24, 2025
e868b6a
build_ci_multi.yml: split logins to separate workflow to verify them,…
vszakats Oct 24, 2025
fe14057
build_ci_multi.yml drop matrix, it had a single item, with an unused …
vszakats Oct 24, 2025
fd91820
build_ci_multi.yml cleanup
vszakats Oct 24, 2025
8488253
build_ci_multi.yml cleanup 2
vszakats Oct 24, 2025
4c5084f
build_ci_multi.yml cleanup 3
vszakats Oct 24, 2025
b329f59
build_ci_multi: pass secret via stdin from builtin command echo
vszakats Oct 24, 2025
2790f6c
narrow scope of ghcr cred envs
vszakats Oct 24, 2025
d186735
build_ci_multi.yml try ghcr creds
vszakats Oct 24, 2025
a5c0392
fixup
vszakats Oct 24, 2025
d760fb0
try without podman-login action
vszakats Oct 24, 2025
c821490
try without podman-login action fixup
vszakats Oct 24, 2025
2cde6a7
try simplify podman-login init
vszakats Oct 24, 2025
563e400
pass secret via stdin in all jobs
vszakats Oct 24, 2025
4c1826f
drop interim envs in redhat-actions/podman-login actions
vszakats Oct 24, 2025
760bad4
cleanup
vszakats Oct 24, 2025
35ae939
use secrets.GITHUB_TOKEN for consistency with other repos
vszakats Oct 24, 2025
fae059d
GHA: set/adjust concurrency
vszakats Oct 24, 2025
2aca58f
ghcr: try logging in as repo owner instead of PR actor
vszakats Oct 24, 2025
6ff79bb
replace ghcr user with curl (repo owner) (was: actor)
vszakats Oct 24, 2025
1827806
Revert "replace ghcr user with curl (repo owner) (was: actor)"
vszakats Oct 24, 2025
a29fdf8
cleanups
vszakats Oct 24, 2025
331e5e3
cleanups
vszakats Oct 24, 2025
3bd4389
try failed login
vszakats Oct 24, 2025
d78be6d
cleanup
vszakats Oct 24, 2025
05b302e
simplify direct ghcr.io
vszakats Oct 24, 2025
bbb7b41
try applyinh curl apt-get tricks
vszakats Oct 25, 2025
6fb9f6f
sync up two outlier "verify key" step names
vszakats Oct 27, 2025
ef89f08
GHA move step `name:` first when not there
vszakats Oct 27, 2025
24631f5
GHA: drop step name from actions/checkout steps
vszakats Oct 27, 2025
476f950
GHA: sync up yaml strings to use single-quotes
vszakats Oct 27, 2025
b963ae0
GHA: single-quote `name:` where missing
vszakats Oct 27, 2025
9792078
GHA: drop name: capitalization where missing
vszakats Oct 27, 2025
dd470c1
GHA: sync wording for some `name:`s
vszakats Oct 27, 2025
c2cbca0
GHA: sync imperative `name:`
vszakats Oct 27, 2025
5d40de3
drop duplicate cosign install step
vszakats Oct 27, 2025
24bec48
GHA: yaml: move env: before run: where not there
vszakats Oct 27, 2025
55a020f
redhat-actions/podman-login upside/downside
vszakats Oct 27, 2025
d2cd502
redhat-actions/podman-login upside/downside updated
vszakats Oct 27, 2025
f5ea1cc
try a little build speed optimization
vszakats Oct 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# Copyright (C) 2023 James Fuller, <jim@webcomposite.com>, et al.
#
# SPDX-License-Identifier: curl
# Copyright (C) 2023 James Fuller, <jim@webcomposite.com>, et al.
#
# SPDX-License-Identifier: curl
2 changes: 1 addition & 1 deletion .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ Send your suggestions using one of these methods:

3. as an [issue](https://github.com/curl/curl-container/issues)

/ The curl-container team!
/ The curl-container team!
115 changes: 81 additions & 34 deletions .github/workflows/build_ci_multi.yml
Original file line number Diff line number Diff line change
@@ -1,48 +1,95 @@
name: build_ci_multi_images
on:

'on':
pull_request:
types: [ opened, synchronize, reopened, labeled, unlabeled ]
types: [opened, synchronize, reopened, labeled, unlabeled]
branches:
- main

permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true

env:
REGISTRY_USER: ${{ github.actor }}
REGISTRY_PASSWORD: ${{ github.token }}
IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}
permissions: {}

jobs:
build_multi_ci:
name: ${{ matrix.build.name }}
verify_secrets_ghcr:
name: 'Verify credentials'
runs-on: 'ubuntu-latest'
steps:
# upside: it logs out and aims to delete creds ~/.docker/config.json
# downside: extra dependency, uses -p instead of --password-stdin
- name: 'login ghcr.io (actor, via action)'
uses: redhat-actions/podman-login@4934294ad0449894bcd1e9f191899d7292469603 # v1.7
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
registry: ghcr.io/${{ github.repository_owner }}

- name: 'login ghcr.io (actor, direct)'
env:
REGISTRY_USER: '${{ github.actor }}'
REGISTRY_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
run: |
podman --version
echo "${REGISTRY_TOKEN}" | podman login -u "${REGISTRY_USER}" --password-stdin "ghcr.io/${GITHUB_REPOSITORY_OWNER}"
docker --version
echo "${REGISTRY_TOKEN}" | docker login -u "${REGISTRY_USER}" --password-stdin "ghcr.io/${GITHUB_REPOSITORY_OWNER}"

- name: 'login ghcr.io (repo owner, direct)'
env:
REGISTRY_USER: '${{ github.repository_owner }}'
REGISTRY_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
IMAGE_REGISTRY: 'ghcr.io/${{ github.repository_owner }}'
run: |
podman --version
echo "${REGISTRY_TOKEN}" | podman login -u "${REGISTRY_USER}" --password-stdin "${IMAGE_REGISTRY}"
docker --version
echo "${REGISTRY_TOKEN}" | docker login -u "${REGISTRY_USER}" --password-stdin "${IMAGE_REGISTRY}"

verify_secrets_registries:
name: 'Verify credentials (docker hub, quay)'
runs-on: 'ubuntu-latest'
permissions:
contents: read
packages: write
strategy:
fail-fast: false
matrix:
install_latest: [ true ]
if: ${{ github.secret_source == 'Actions' }}
steps:
- name: "login docker hub"
- name: 'login docker hub'
env:
DOCKER_HUB_USER: '${{ secrets.DOCKER_HUB_USER }}'
DOCKER_HUB_TOKEN: '${{ secrets.DOCKER_HUB_TOKEN }}'
run: |
podman login -u ${{secrets.DOCKER_HUB_USER}} -p ${{secrets.DOCKER_HUB_TOKEN}} docker.io
docker login -u ${{secrets.DOCKER_HUB_USER}} -p ${{secrets.DOCKER_HUB_TOKEN}}
- name: "login quay.io"
echo "${DOCKER_HUB_TOKEN}" | podman login -u "${DOCKER_HUB_USER}" --password-stdin docker.io
echo "${DOCKER_HUB_TOKEN}" | docker login -u "${DOCKER_HUB_USER}" --password-stdin

- name: 'login quay.io'
env:
QUAY_USER: '${{ secrets.QUAY_USER }}'
QUAY_TOKEN: '${{ secrets.QUAY_TOKEN }}'
run: |
echo "${QUAY_TOKEN}" | podman login -u "${QUAY_USER}" --password-stdin quay.io
echo "${QUAY_TOKEN}" | docker login -u "${QUAY_USER}" --password-stdin quay.io

build_multi_ci:
name: 'build_multi_ci'
runs-on: 'ubuntu-latest'
steps:
- name: 'install dev deps'
run: |
podman login -u ${{secrets.QUAY_USER}} -p ${{secrets.QUAY_TOKEN}} quay.io
docker login -u ${{secrets.QUAY_USER}} -p ${{secrets.QUAY_TOKEN}} quay.io
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
sudo apt-get -o Dpkg::Use-Pty=0 update
sudo rm -f /var/lib/man-db/auto-update
sudo apt-get -o Dpkg::Use-Pty=0 install -y \
qemu-user-static buildah less git make podman clamav clamav-freshclam

- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- run: |
sudo apt-get update
sudo apt-get -y install qemu-user-static buildah less git make podman clamav clamav-freshclam
name: 'install dev deps'
- run: buildah unshare make branch_or_ref=master release_tag=master multibuild
name: 'build multi image'
- run: buildah unshare make dist_name=localhost/curl-multi release_tag=master test
name: 'test image'
- run: make image_name=localhost/curl-multi:master scan
name: 'security scan image'
- name: 'build multi image'
run: buildah unshare make branch_or_ref=master release_tag=master multibuild
- name: 'test image'
run: buildah unshare make dist_name=localhost/curl-multi release_tag=master test
- name: 'install scan prereqs'
run: /home/linuxbrew/.linuxbrew/bin/brew install grype trivy
- name: 'security scan image'
run: |
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
make image_name=localhost/curl-multi:master scan
108 changes: 58 additions & 50 deletions .github/workflows/build_latest_release_multi.yml
Original file line number Diff line number Diff line change
@@ -1,82 +1,90 @@
name: build_latest_release_multi_images
on:

'on':
push:
tags:
- '*'

permissions: {}
concurrency:
group: ${{ github.workflow }}-${{ github.sha }}
cancel-in-progress: true

env:
REGISTRY_USER: ${{ github.actor }}
REGISTRY_PASSWORD: ${{ github.token }}
IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}
permissions: {}

jobs:
build_multi_latest_release_tag:
name: ${{ matrix.build.name }}
runs-on: 'ubuntu-latest'
permissions:
contents: read
packages: write
packages: write # To create/update container on ghcr.io
strategy:
fail-fast: false
matrix:
install_latest: [ true ]
install_latest: [true]
steps:
- name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
tag_name: ${{ github.ref }}
- name: Log in to ghcr.io
- name: 'login ghcr.io'
uses: redhat-actions/podman-login@4934294ad0449894bcd1e9f191899d7292469603 # v1.7
with:
username: ${{ env.REGISTRY_USER }}
password: ${{ env.REGISTRY_PASSWORD }}
registry: ${{ env.IMAGE_REGISTRY }}
- name: "login docker hub"
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
registry: ghcr.io/${{ github.repository_owner }}
- name: 'login docker hub'
env:
DOCKER_HUB_USER: '${{ secrets.DOCKER_HUB_USER }}'
DOCKER_HUB_TOKEN: '${{ secrets.DOCKER_HUB_TOKEN }}'
run: |
podman login -u ${{secrets.DOCKER_HUB_USER}} -p ${{secrets.DOCKER_HUB_TOKEN}} docker.io
docker login -u ${{secrets.DOCKER_HUB_USER}} -p ${{secrets.DOCKER_HUB_TOKEN}}
- name: "login quay.io"
echo "${DOCKER_HUB_TOKEN}" | podman login -u "${DOCKER_HUB_USER}" --password-stdin docker.io
echo "${DOCKER_HUB_TOKEN}" | docker login -u "${DOCKER_HUB_USER}" --password-stdin
- name: 'login quay.io'
env:
QUAY_USER: '${{ secrets.QUAY_USER }}'
QUAY_TOKEN: '${{ secrets.QUAY_TOKEN }}'
run: |
echo "${QUAY_TOKEN}" | podman login -u "${QUAY_USER}" --password-stdin quay.io
echo "${QUAY_TOKEN}" | docker login -u "${QUAY_USER}" --password-stdin quay.io
- name: 'install dev deps'
run: |
podman login -u ${{secrets.QUAY_USER}} -p ${{secrets.QUAY_TOKEN}} quay.io
docker login -u ${{secrets.QUAY_USER}} -p ${{secrets.QUAY_TOKEN}} quay.io
- run: |
sudo apt-get update
sudo apt-get -y install qemu-user-static buildah less git make podman clamav clamav-freshclam
name: 'install dev deps'
- name: Sets env vars
- name: 'set env vars'
run: |
release_tag_redirect=$(curl -s https://github.com/curl/curl/releases/latest -w'%{redirect_url}\n' -o /dev/null)
latest_release_ref=$(basename ${release_tag_redirect})
echo "TAG_REF=$latest_release_ref" >> $GITHUB_ENV
rel=${latest_release_ref:5}
release_image_tag="${rel//_/.}"
echo "REL=$release_image_tag" >> $GITHUB_ENV
- run: buildah unshare make branch_or_ref=$TAG_REF release_tag=$REL multibuild
name: 'build multi image'
- run: buildah unshare make dist_name=localhost/curl-multi release_tag=$REL test
name: 'test image'
- run: make image_name=localhost/curl-multi:${REL} scan
name: 'security scan image'
- run: |
- name: 'build multi image'
run: buildah unshare make branch_or_ref=$TAG_REF release_tag=$REL multibuild
- name: 'test image'
run: buildah unshare make dist_name=localhost/curl-multi release_tag=$REL test
- name: 'install scan prereqs'
run: /home/linuxbrew/.linuxbrew/bin/brew install grype trivy
- name: 'security scan image'
run: |
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
make image_name=localhost/curl-multi:${REL} scan
- name: 'push images to github registry'
run: |
buildah manifest push --format v2s2 --all curl-multi:$REL "docker://ghcr.io/curl/curl-container/curl-multi:${REL}"
buildah manifest push --format v2s2 --all curl-base-multi:$REL "docker://ghcr.io/curl/curl-container/curl-base-multi:${REL}"
name: 'push images to github registry'
- name: Install Cosign
- name: 'install Cosign'
uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
- name: Write signing key to disk (only needed for `cosign sign --key`)
run: echo "${{ secrets.COSIGN_PRIVATE_KEY }}" > cosign.key
- name: Sign images with sigstore key
- name: 'write signing key to disk (only needed for `cosign sign --key`)'
env:
COSIGN_PRIVATE_KEY: '${{ secrets.COSIGN_PRIVATE_KEY }}'
run: echo "${COSIGN_PRIVATE_KEY}" > cosign.key
- name: 'sign images with sigstore key'
env:
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
run: |
cosign sign -y --key cosign.key ghcr.io/curl/curl-container/curl-multi:$REL
cosign sign -y --key cosign.key ghcr.io/curl/curl-container/curl-base-multi:$REL
env:
COSIGN_PASSWORD: ${{secrets.COSIGN_PASSWORD}}
- name: Write public key to disk
run: echo "${{ secrets.COSIGN_PUBLIC_KEY }}" > cosign.pub
- name: Verify image with public key
- name: 'verify image with public key'
run: |
cosign verify --key cosign.pub ghcr.io/curl/curl-container/curl-multi:$REL
cosign verify --key cosign.pub ghcr.io/curl/curl-container/curl-base-multi:$REL
Expand All @@ -86,15 +94,15 @@ jobs:
buildah manifest push --format v2s2 --all localhost/curl-multi:$REL "docker://docker.io/curlimages/curl:latest"
buildah manifest push --format v2s2 --all localhost/curl-base-multi:$REL "docker://docker.io/curlimages/curl-base:${REL}"
buildah manifest push --format v2s2 --all localhost/curl-base-multi:$REL "docker://docker.io/curlimages/curl-base:latest"
- name: Sign images with a sigstore key
- name: 'sign images with a sigstore key'
env:
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
run: |
cosign sign -y --key cosign.key docker.io/curlimages/curl:$REL
cosign sign -y --key cosign.key docker.io/curlimages/curl:latest
cosign sign -y --key cosign.key docker.io/curlimages/curl-base:$REL
cosign sign -y --key cosign.key docker.io/curlimages/curl-base:latest
env:
COSIGN_PASSWORD: ${{secrets.COSIGN_PASSWORD}}
- name: Verify image
- name: 'verify image with public key'
run: |
cosign verify --key cosign.pub docker.io/curlimages/curl:$REL
cosign verify --key cosign.pub docker.io/curlimages/curl:latest
Expand All @@ -106,17 +114,17 @@ jobs:
buildah manifest push --format v2s2 --all localhost/curl-multi:$REL "docker://quay.io/curl/curl:latest"
buildah manifest push --format v2s2 --all localhost/curl-base-multi:$REL "docker://quay.io/curl/curl-base:${REL}"
buildah manifest push --format v2s2 --all localhost/curl-base-multi:$REL "docker://quay.io/curl/curl-base:latest"
- name: Sign images with a sigstore key
- name: 'sign images with a sigstore key'
env:
COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}
run: |
cosign sign -y --key cosign.key quay.io/curl/curl:$REL
cosign sign -y --key cosign.key quay.io/curl/curl:latest
cosign sign -y --key cosign.key quay.io/curl/curl-base:$REL
cosign sign -y --key cosign.key quay.io/curl/curl-base:latest
env:
COSIGN_PASSWORD: ${{secrets.COSIGN_PASSWORD}}
- name: Verify image
- name: 'verify image with public key'
run: |
cosign verify --key cosign.pub quay.io/curl/curl:$REL
cosign verify --key cosign.pub quay.io/curl/curl:latest
cosign verify --key cosign.pub quay.io/curl/curl-base:$REL
cosign verify --key cosign.pub quay.io/curl/curl-base:latest
cosign verify --key cosign.pub quay.io/curl/curl-base:latest
Loading