Docker jobs¶
determine-images¶
Determines which images to build and publish as a part of the workflow run. To speed up the workflow and avoid wasteful resource consumption, only a subset of all images are built by the workflow and a only subset of those images are published to GHCR. This job determines those images.
Change |
|
|
|
|
|
|
|---|---|---|---|---|---|---|
|
🛠️ |
🚀 |
||||
|
🛠️ |
🚀 |
🛠️ |
|||
|
🛠️ |
🛠️ |
🚀 |
🚀 |
||
|
🚀 |
🚀 denotes that the image is published to GHCR. 🛠️ denotes that the image is built but not published.
Note
The upstream_db image is only built here and reused in other workflows for
convenience and speed, it is never published.
Outputs:
The build_matrix and publish_matrix conventionally use the name singular
name “image” for the field because inside the steps
matrix.image
can be used to refer to the current matrix entry.
interface Output {
do_build: "true" | "false" // whether one or more images are to be built
build_matrix: {
image: (
| "upstream_db"
| "catalog"
| "ingestion_server"
| "api"
| "api_nginx"
| "frontend"
)[] // the names of the image to be built
include: (
| { image: "upstream_db"; context: "docker/upstream_db"; target: "db" }
| { image: "catalog"; context: "catalog"; target: "cat" }
| {
image: "ingestion_server"
context: "ingestion_server"
target: "ing"
}
| { image: "api"; context: "api"; target: "api" }
| { image: "api_nginx"; context: "api"; target: "nginx" }
)[] // additional information about images to be built
}
do_publish: "true" | "false" // whether one or more images are to be published
publish_matrix: {
image: ("catalog" | "ingestion_server" | "api" | "api_nginx" | "frontend")[] // the name of the image to be published
}
}
build-images¶
Builds images as dictated by the determine-images job.
Since the images are built in a matrix, some image-specific steps are
conditionally run using an if expression. Since any unused Docker build
arguments have no effect, the job simply populates all build arguments needed by
all images.
Images built by this job are published as .tar artifacts and can be loaded
into other jobs that need them using the
load-img action.
This job is only run if there is at least one image needed to build, based on
the do_build output of the determine-images job.
This matrix exports all of the Docker image artifacts.
publish-images¶
Publishes images to GHCR as dictated by the
determine-images job. In a matrix, this job downloads the
images to be published from their .tar files using the
load-img job and then tags and pushes them
to GHCR.
Images are only published if all the following conditions are met.
the event is a push to
mainthe repo is
WordPress/openverseand not a forkthere is at least one image to publish as per the
do_publishoutput of thedetermine-imagesjoball the primary tests (
test-cat,test-ing,test-api,nuxt-build) succeeded, implying that their changes are valid, or were skipped, implying that they have no changes.