Skip to content

Commit f341fa2

Browse files
authored
Merge pull request #28 from NGWPC/mpena-ci-updates
ci updates
2 parents 81c6aee + 269617d commit f341fa2

2 files changed

Lines changed: 60 additions & 15 deletions

File tree

.github/workflows/ci-cd.yml

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,11 @@ jobs:
6767
test_image_tag: ${{ steps.vars.outputs.test_image_tag }}
6868
alias_tag: ${{ steps.vars.outputs.alias_tag }}
6969
clean_ref: ${{ steps.vars.outputs.clean_ref }}
70+
default_ref: ${{ steps.vars.outputs.default_ref }}
7071
ngen_image_digest: ${{ steps.vars.outputs.ngen_image_digest }}
7172
ngen_image_revision: ${{ steps.vars.outputs.ngen_image_revision }}
73+
ewts_revision: ${{ steps.vars.outputs.ewts_revision }}
74+
msw_mgr_revision: ${{ steps.vars.outputs.msw_mgr_revision }}
7275
steps:
7376
- name: Compute image vars
7477
id: vars
@@ -100,6 +103,18 @@ jobs:
100103
CLEAN_REF=$(echo "$REAL_REF" | tr '[:upper:]' '[:lower:]' | sed 's/\//-/g')
101104
SHORT_SHA="${REAL_SHA:0:7}"
102105
106+
# default source-repo ref: follow the release-line branch we're building from
107+
# (development / ngwpc-candidate / ngwpc-release); tags and other branches fall
108+
# back to development. Override per source repo via the *_REF dispatch inputs.
109+
case "${GITHUB_REF_TYPE}:${GITHUB_REF_NAME}" in
110+
branch:development|branch:ngwpc-candidate|branch:ngwpc-release)
111+
DEFAULT_REF="$GITHUB_REF_NAME" ;;
112+
*)
113+
DEFAULT_REF="development" ;;
114+
esac
115+
# use an explicit *_REF input if provided, else DEFAULT_REF
116+
ref_or_default() { [ -n "$1" ] && echo "$1" || echo "$DEFAULT_REF"; }
117+
103118
# logic for the tags:
104119
# test_image_tag (commit short sha): used for the initial build and test
105120
# alias_tag: used for final tagging on successful tests
@@ -127,20 +142,40 @@ jobs:
127142
# base image (ngen) metadata for Dockerfile labels
128143
NGEN_IMAGE_TAG="${{ inputs.NGEN_IMAGE_TAG || 'latest' }}"
129144
NGEN_IMAGE="ghcr.io/${ORG}/ngen:${NGEN_IMAGE_TAG}"
130-
NGEN_INSPECT=$(skopeo inspect "docker://${NGEN_IMAGE}" 2>/dev/null || echo '{}')
145+
NGEN_INSPECT=$(skopeo inspect --override-os linux --override-arch amd64 "docker://${NGEN_IMAGE}" 2>/dev/null || echo '{}')
131146
NGEN_IMAGE_DIGEST=$(echo "$NGEN_INSPECT" | jq -r '.Digest // "unknown"')
132147
NGEN_IMAGE_REVISION=$(echo "$NGEN_INSPECT" | jq -r '.Labels["org.opencontainers.image.revision"] // "unknown"')
133148
149+
# resolve each source repo's ref (branch/tag/SHA) to its commit SHA for revision labels
150+
resolve_sha() {
151+
local url="$1" ref="$2" out sha
152+
# a full 40-char SHA can't be looked up via ls-remote; use it directly
153+
if [[ "$ref" =~ ^[0-9a-f]{40}$ ]]; then echo "$ref"; return; fi
154+
out=$(git ls-remote "$url" "$ref" "refs/tags/${ref}^{}" 2>/dev/null)
155+
# prefer the dereferenced commit (^{}) for annotated tags; else first match
156+
sha=$(echo "$out" | grep '\^{}$' | head -n1 | cut -f1)
157+
[ -z "$sha" ] && sha=$(echo "$out" | head -n1 | cut -f1)
158+
echo "${sha:-unknown}"
159+
}
160+
161+
EWTS_REVISION=$(resolve_sha "https://github.com/${{ inputs.EWTS_ORG || github.repository_owner }}/nwm-ewts.git" "$(ref_or_default "${{ inputs.EWTS_REF }}")")
162+
MSW_MGR_REVISION=$(resolve_sha "https://github.com/${{ inputs.MSW_MGR_ORG || github.repository_owner }}/nwm-msw-mgr.git" "$(ref_or_default "${{ inputs.MSW_MGR_REF }}")")
163+
134164
# save outputs
135-
echo "org=${ORG}" >> "$GITHUB_OUTPUT"
136-
echo "image_base=${IMAGE_BASE}" >> "$GITHUB_OUTPUT"
137-
echo "test_image_tag=${TEST_TAG}" >> "$GITHUB_OUTPUT"
138-
echo "alias_tag=${ALIAS}" >> "$GITHUB_OUTPUT"
139-
echo "commit_sha=${REAL_SHA}" >> "$GITHUB_OUTPUT"
140-
echo "commit_sha_short=${SHORT_SHA}" >> "$GITHUB_OUTPUT"
141-
echo "clean_ref=${CLEAN_REF}" >> "$GITHUB_OUTPUT"
142-
echo "ngen_image_digest=${NGEN_IMAGE_DIGEST}" >> "$GITHUB_OUTPUT"
143-
echo "ngen_image_revision=${NGEN_IMAGE_REVISION}" >> "$GITHUB_OUTPUT"
165+
cat >> "$GITHUB_OUTPUT" <<EOF
166+
org=${ORG}
167+
image_base=${IMAGE_BASE}
168+
test_image_tag=${TEST_TAG}
169+
alias_tag=${ALIAS}
170+
commit_sha=${REAL_SHA}
171+
commit_sha_short=${SHORT_SHA}
172+
clean_ref=${CLEAN_REF}
173+
default_ref=${DEFAULT_REF}
174+
ngen_image_digest=${NGEN_IMAGE_DIGEST}
175+
ngen_image_revision=${NGEN_IMAGE_REVISION}
176+
ewts_revision=${EWTS_REVISION}
177+
msw_mgr_revision=${MSW_MGR_REVISION}
178+
EOF
144179
145180
# CodeQL scan
146181
codeql-scan:
@@ -202,9 +237,11 @@ jobs:
202237
BASE_IMAGE_DIGEST=${{ needs.setup.outputs.ngen_image_digest }}
203238
BASE_IMAGE_REVISION=${{ needs.setup.outputs.ngen_image_revision }}
204239
EWTS_ORG=${{ inputs.EWTS_ORG || github.repository_owner }}
205-
EWTS_REF=${{ inputs.EWTS_REF || 'development' }}
240+
EWTS_REF=${{ inputs.EWTS_REF || needs.setup.outputs.default_ref }}
241+
EWTS_REVISION=${{ needs.setup.outputs.ewts_revision }}
206242
MSW_MGR_ORG=${{ inputs.MSW_MGR_ORG || github.repository_owner }}
207-
MSW_MGR_REF=${{ inputs.MSW_MGR_REF || 'development' }}
243+
MSW_MGR_REF=${{ inputs.MSW_MGR_REF || needs.setup.outputs.default_ref }}
244+
MSW_MGR_REVISION=${{ needs.setup.outputs.msw_mgr_revision }}
208245
IMAGE_SOURCE=https://github.com/${{ github.repository }}
209246
IMAGE_VENDOR=${{ github.repository_owner }}
210247
IMAGE_VERSION=${{ needs.setup.outputs.clean_ref }}

Dockerfile

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,25 @@ ARG IMAGE_SOURCE="unknown"
4444
ARG IMAGE_VENDOR="unknown"
4545
ARG IMAGE_VERSION="unknown"
4646
ARG IMAGE_REVISION="unknown"
47+
ARG EWTS_REVISION="unknown"
48+
ARG MSW_MGR_REVISION="unknown"
4749

48-
# OCI Standard Labels
50+
# Image Labels: OCI-spec annotations followed by custom source-repo metadata.
4951
LABEL org.opencontainers.image.base.name="${NGEN_IMAGE}" \
5052
org.opencontainers.image.base.digest="${BASE_IMAGE_DIGEST}" \
51-
io.${IMAGE_NAMESPACE}.image.base.revision="${BASE_IMAGE_REVISION}" \
5253
org.opencontainers.image.source="${IMAGE_SOURCE}" \
5354
org.opencontainers.image.vendor="${IMAGE_VENDOR}" \
5455
org.opencontainers.image.version="${IMAGE_VERSION}" \
5556
org.opencontainers.image.revision="${IMAGE_REVISION}" \
5657
org.opencontainers.image.title="NGEN Forecast/Hindcast Manager" \
57-
org.opencontainers.image.description="Docker image for the NGEN Forecast/Hindcast application"
58+
org.opencontainers.image.description="Docker image for the NGEN Forecast/Hindcast application" \
59+
io.${IMAGE_NAMESPACE}.image.base.revision="${BASE_IMAGE_REVISION}" \
60+
io.${IMAGE_NAMESPACE}.ewts.org="${EWTS_ORG}" \
61+
io.${IMAGE_NAMESPACE}.ewts.ref="${EWTS_REF}" \
62+
io.${IMAGE_NAMESPACE}.ewts.revision="${EWTS_REVISION}" \
63+
io.${IMAGE_NAMESPACE}.msw.mgr.org="${MSW_MGR_ORG}" \
64+
io.${IMAGE_NAMESPACE}.msw.mgr.ref="${MSW_MGR_REF}" \
65+
io.${IMAGE_NAMESPACE}.msw.mgr.revision="${MSW_MGR_REVISION}"
5866

5967
# Activate the existing virtual environment
6068
ENV PATH="/ngen-app/ngen-python/bin:${PATH}"

0 commit comments

Comments
 (0)