Skip to content

Commit

Permalink
Parallelize CI build
Browse files Browse the repository at this point in the history
CI was building packages one after another in a single VM. This is slow,
has the risk of one package affecting another and makes it harder to
figure out which job failed. This change adds a preparation job which
builds the image and gets the list of packages and changes build job
into matrix depending on the prepare job.
  • Loading branch information
Kixunil committed Dec 18, 2023
1 parent e09a6bf commit 49c6dc4
Showing 1 changed file with 34 additions and 18 deletions.
52 changes: 34 additions & 18 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,36 @@ env:
EXECUTE_CMD: "$PODMAN_CMD exec -u $USER_NAME -i $CONTAINER_NAME"

jobs:
prepare:
runs-on: ubuntu-latest
outputs:
sources: ${{ steps.list-sources.outputs.sources }}
steps:
- uses: actions/checkout@v2
- name: Build CADR Running Environment Image
run: |
sudo apt-get update
sudo apt-get upgrade podman
$PODMAN_CMD build -t $IMAGE_NAME .
$PODMAN_CMD save $IMAGE_NAME > CADR_image.tar
- name: Upload the Running Environment Image to Artifact
uses: actions/upload-artifact@v2
if: ${{ always() }}
with:
name: CADR_image
path: CADR_image.tar
- name: Install jq
run: sudo apt-get install -y jq
- name: List sources
id: list-sources
run: echo "::set-output name=sources::$(ls pkg_specs/*.sss | sed -e 's:^pkg_specs/::' -e 's/\.sss$//' | jq -R -s -c 'split("\n")[:-1]')"
build:
needs: prepare
if: ${{ success() }}
runs-on: ubuntu-latest
strategy:
matrix:
source: ${{ fromJson(needs.prepare.outputs.sources) }}
steps:
- uses: actions/checkout@v2
- name: Setup CI Build Script
Expand All @@ -35,29 +63,17 @@ jobs:
\$MKCMD all
EOF
chmod +x $CI_SCRIPT
- name: Build CADR Running Environment Image
run: |
sudo apt-get update
sudo apt-get upgrade podman
$PODMAN_CMD build -t $IMAGE_NAME .
$PODMAN_CMD save $IMAGE_NAME > CADR_image.tar
- name: Upload the Running Environment Image to Artifact
uses: actions/upload-artifact@v2
if: ${{ always() }}
with:
name: CADR_image
path: CADR_image.tar
- name: Spawn Podman Container to Prepare Running Environment
run: |
eval $SPAWN_CONTAINER
- name: Build CADR
run: |
eval $EXECUTE_CMD ${BUILD_DIR}/$CI_SCRIPT
eval SOURCES=${{ matrix.source }} $EXECUTE_CMD ${BUILD_DIR}/$CI_SCRIPT
- name: Upload Debian Packages Just Built to Artifact
uses: actions/upload-artifact@v2
if: ${{ always() }}
with:
name: CADR_debs
name: ${{ matrix.source }}
path: build/*.deb
- name: Check SHA256
if: ${{ always() }}
Expand All @@ -81,7 +97,7 @@ jobs:
sudo chown -R $USER $PWD
test:
needs: build
needs: [build, prepare]
if: ${{ success() }}
runs-on: ubuntu-latest
strategy:
Expand Down Expand Up @@ -120,10 +136,10 @@ jobs:
$PODMAN_CMD load < CADR_image.tar
mkdir build
- name: Download Pre-built Debian Packages
uses: actions/download-artifact@v3
uses: thecodenebula/download-artifact@e9e49e9bbce8ff2b901957ee034714cab099644a
with:
name: CADR_debs
path: build
names: ${{ fromJson(needs.prepare.outputs.sources) }}
paths: build
- name: Test CADR Basic
run: |
eval $SPAWN_CONTAINER
Expand Down

0 comments on commit 49c6dc4

Please sign in to comment.