99 openssl_ref :
1010 required : true
1111 type : string
12+ fips_ref :
13+ required : false
14+ type : string
1215 replace_default :
1316 required : false
1417 type : boolean
@@ -18,103 +21,174 @@ jobs:
1821 build_wolfprovider_common :
1922 name : Build wolfProvider
2023 runs-on : ubuntu-22.04
21- # Run inside Debian Bookworm to match packaging environment
24+ # Run inside Debian Bookworm using container from ghcr.io/aidangarske/wolfprovider-build:bookworm
25+ # We are using this container to avoid having to install all the dependencies on the host machine
26+ # and speed up the build process.
27+ # TODO: Switch from aidangarske fork to main WP repo for the build container.
2228 container :
23- image : debian :bookworm
29+ image : ghcr.io/aidangarske/wolfprovider-build :bookworm
2430 env :
2531 DEBIAN_FRONTEND : noninteractive
32+ # Add network capabilities so ifconfig/RTNETLINK operations are permitted
33+ # These are passed to `docker run` as runtime options
34+ options : --cap-add=NET_ADMIN --cap-add=NET_RAW
2635 timeout-minutes : 20
2736 env :
2837 WOLFSSL_PACKAGES_PATH : /tmp/wolfssl-packages
2938 OPENSSL_PACKAGES_PATH : /tmp/openssl-packages
3039 WOLFPROV_PACKAGES_PATH : /tmp/wolfprov-packages
40+ DEBS_PATH : debs
3141 steps :
32- # Install git prior to cloning to ensure we have the full repo
33- # TODO: create a docker with these pre-installed
34- - name : Install common dependencies
42+ # Check if artifact already exists from another job in the same workflow run
43+ # When multiple matrix jobs run in parallel, the first one to finish uploads the artifact
44+ # Other jobs can then find it and skip rebuilding (no need to download it, just check it exists)
45+ - name : Check for existing artifact from same run
46+ id : check_artifact
47+ continue-on-error : true
48+ uses : actions/download-artifact@v4
49+ with :
50+ name : debian-packages-${{ inputs.fips_ref }}${{ inputs.replace_default && '-replace-default' || '' }}-${{ inputs.wolfssl_ref }}-${{ inputs.openssl_ref }}
51+
52+ # Download pre-built packages from debs branch
53+ - name : Checkout debs branch
54+ if : steps.check_artifact.outcome != 'success'
55+ uses : actions/checkout@v4
56+ with :
57+ repository : wolfSSL/wolfProvider
58+ ref : debs
59+ sparse-checkout : |
60+ fips
61+ nonfips
62+ openssl
63+ sparse-checkout-cone-mode : false
64+ path : ${{ env.DEBS_PATH }}
65+
66+ - name : Setup packages from debs branch
67+ if : steps.check_artifact.outcome != 'success'
68+ run : |
69+ mkdir -p ${{ env.WOLFSSL_PACKAGES_PATH }}
70+ mkdir -p ${{ env.OPENSSL_PACKAGES_PATH }}
71+
72+ echo "Available packages in debs branch:"
73+ ls -la ${{ env.DEBS_PATH }}/
74+
75+ # Copy packages based on build type
76+ if [ "${{ inputs.fips_ref }}" = "FIPS" ]; then
77+ if [ -d "${{ env.DEBS_PATH }}/fips" ] && [ "$(ls -A ${{ env.DEBS_PATH }}/fips/*.deb 2>/dev/null)" ]; then
78+ echo "Copying FIPS wolfSSL packages..."
79+ cp ${{ env.DEBS_PATH }}/fips/*.deb ${{ env.WOLFSSL_PACKAGES_PATH }}/
80+ else
81+ echo "ERROR: No FIPS packages found in debs branch"
82+ exit 1
83+ fi
84+ else
85+ if [ -d "${{ env.DEBS_PATH }}/nonfips" ] && [ "$(ls -A ${{ env.DEBS_PATH }}/nonfips/*.deb 2>/dev/null)" ]; then
86+ echo "Copying non-FIPS wolfSSL packages..."
87+ cp ${{ env.DEBS_PATH }}/nonfips/*.deb ${{ env.WOLFSSL_PACKAGES_PATH }}/
88+ else
89+ echo "ERROR: No non-FIPS packages found in debs branch"
90+ exit 1
91+ fi
92+ fi
93+ # Copy OpenSSL packages
94+ if [ -d "${{ env.DEBS_PATH }}/openssl" ] && [ "$(ls -A ${{ env.DEBS_PATH }}/openssl/*.deb 2>/dev/null)" ]; then
95+ echo "Copying OpenSSL packages..."
96+ cp ${{ env.DEBS_PATH }}/openssl/*.deb ${{ env.OPENSSL_PACKAGES_PATH }}/
97+ else
98+ echo "WARNING: No OpenSSL packages found in debs branch"
99+ fi
100+
101+ echo ""
102+ echo "Packages ready for installation:"
103+ echo "wolfSSL packages:"
104+ ls -la ${{ env.WOLFSSL_PACKAGES_PATH }}
105+ echo ""
106+ echo "OpenSSL packages:"
107+ ls -la ${{ env.OPENSSL_PACKAGES_PATH }}
108+
109+ - name : Install OpenSSL and wolfSSL packages
110+ if : steps.check_artifact.outcome != 'success'
35111 run : |
36- apt-get update && apt-get install -y --no-install-recommends \
37- build-essential \
38- devscripts \
39- debhelper \
40- dh-autoreconf \
41- libtool \
42- pkg-config \
43- git \
44- wget \
45- curl \
46- ca-certificates \
47- openssl \
48- dpkg-dev \
49- lintian \
50- fakeroot \
51- dh-exec \
52- equivs \
53- expect \
54- xxd \
55- bc \
56- libdistro-info-perl
112+ echo "Installing OpenSSL and wolfSSL packages (${{ inputs.fips_ref }})..."
113+
114+ # Install OpenSSL packages first
115+ if [ -n "$(ls -A ${{ env.OPENSSL_PACKAGES_PATH }}/*.deb 2>/dev/null)" ]; then
116+ echo "Installing OpenSSL packages..."
117+ dpkg -i ${{ env.OPENSSL_PACKAGES_PATH }}/*.deb || true
118+ fi
119+ # Install wolfSSL packages
120+ if [ -n "$(ls -A ${{ env.WOLFSSL_PACKAGES_PATH }}/*.deb 2>/dev/null)" ]; then
121+ echo "Installing wolfSSL packages..."
122+ dpkg -i ${{ env.WOLFSSL_PACKAGES_PATH }}/*.deb || true
123+ fi
124+
125+ # Fix any dependency issues
126+ apt-get install -f -y
127+
128+ echo ""
129+ echo "Packages installed successfully:"
130+ echo "OpenSSL:"
131+ dpkg -l | grep openssl || echo " No OpenSSL packages found"
132+ echo ""
133+ echo "wolfSSL:"
134+ dpkg -l | grep wolfssl || echo " No wolfSSL packages found"
57135
58136 - name : Checkout wolfProvider
137+ if : steps.check_artifact.outcome != 'success'
59138 uses : actions/checkout@v4
60139 with :
61140 fetch-depth : 1
62141 fetch-tags : true
63142
64143 # Avoid "detected dubious ownership" warning
65144 - name : Ensure the working directory safe
145+ if : steps.check_artifact.outcome != 'success'
66146 run : |
67147 git config --global --add safe.directory "$GITHUB_WORKSPACE"
68148
69149 # When running on a fork the upstream tags are not present, so fetch them explicitly
70150 - name : Fetch tags from upstream(for Debian versioning)
151+ if : steps.check_artifact.outcome != 'success'
71152 run : |
72153 git remote add upstream https://github.com/wolfSSL/wolfProvider.git || true
73154 git fetch upstream --tags --no-recurse-submodules
74155
75- - name : Install wolfSSL
76- run : |
77- $GITHUB_WORKSPACE/debian/install-wolfssl.sh --tag ${{ inputs.wolfssl_ref }} ${{ env.WOLFSSL_PACKAGES_PATH }}
78-
79- - name : Install OpenSSL
80- run : |
81- $GITHUB_WORKSPACE/debian/install-openssl.sh ${{ inputs.replace_default && '--replace-default' || '' }} ${{ env.OPENSSL_PACKAGES_PATH }}
82-
83156 - name : Install wolfProvider
157+ if : steps.check_artifact.outcome != 'success'
84158 run : |
85- $GITHUB_WORKSPACE/debian/install-wolfprov.sh ${{ env.WOLFPROV_PACKAGES_PATH }}
159+ $GITHUB_WORKSPACE/debian/install-wolfprov.sh ${{ inputs.fips_ref == 'FIPS' && '--fips' || '' }} ${{ env.WOLFPROV_PACKAGES_PATH }}
86160
87- - name : List packages directories
161+ - name : Setup packages directory
162+ if : steps.check_artifact.outcome != 'success'
88163 run : |
164+ mkdir -p ${{ env.WOLFPROV_PACKAGES_PATH }}
165+
166+ # Copy wolfProvider packages (built in previous step)
167+ cp $GITHUB_WORKSPACE/../libwolfprov*.deb ${{ env.WOLFPROV_PACKAGES_PATH }}
168+ cp $GITHUB_WORKSPACE/../libwolfprov*.dsc ${{ env.WOLFPROV_PACKAGES_PATH }}
169+ cp $GITHUB_WORKSPACE/../libwolfprov*.tar.gz ${{ env.WOLFPROV_PACKAGES_PATH }}
170+
171+ # Note: OpenSSL and wolfSSL packages already copied from debs branch earlier
172+
173+ printf "Listing packages directory:\n"
174+ echo "wolfProvider packages:"
89175 ls -la ${{ env.WOLFPROV_PACKAGES_PATH }}
176+ echo ""
177+ echo "wolfSSL packages:"
90178 ls -la ${{ env.WOLFSSL_PACKAGES_PATH }}
179+ echo ""
180+ echo "OpenSSL packages:"
91181 ls -la ${{ env.OPENSSL_PACKAGES_PATH }}
92182
93- - name : Save all packages to cache for use by other workflows
94- uses : actions/cache/save@v4
95- continue-on-error : true
183+ # Save all packages as artifacts for consumers
184+ # Skip upload if artifact already exists (from a parallel run)
185+ - name : Upload wolfProvider packages
186+ if : steps.check_artifact.outcome != 'success'
187+ uses : actions/upload-artifact@v4
96188 with :
189+ name : debian-packages-${{ inputs.fips_ref }}${{ inputs.replace_default && '-replace-default' || '' }}-${{ inputs.wolfssl_ref }}-${{ inputs.openssl_ref }}
97190 path : |
98191 ${{ env.WOLFSSL_PACKAGES_PATH }}
99192 ${{ env.OPENSSL_PACKAGES_PATH }}
100193 ${{ env.WOLFPROV_PACKAGES_PATH }}
101- key : openssl-wolfprov-debian-packages-${{ github.sha }}${{ inputs.replace_default && '-replace-default' || '' }}
102-
103- # Save all packages in a single artifact for consumers
104- # TODO: support debug builds
105- - name : Upload wolfProvider artifacts
106- uses : actions/upload-artifact@v4
107- continue-on-error : true
108- with :
109- name : openssl-wolfprov-debian-packages-${{ github.sha }}${{ inputs.replace_default && '-replace-default' || '' }}
110- path : |
111- ${{ env.WOLFSSL_PACKAGES_PATH }}/*.deb
112- ${{ env.WOLFSSL_PACKAGES_PATH }}/*.dsc
113- ${{ env.WOLFSSL_PACKAGES_PATH }}/*.tar.gz
114- ${{ env.OPENSSL_PACKAGES_PATH }}/*.deb
115- ${{ env.OPENSSL_PACKAGES_PATH }}/*.dsc
116- ${{ env.OPENSSL_PACKAGES_PATH }}/*.tar.gz
117- ${{ env.WOLFPROV_PACKAGES_PATH }}/*.deb
118- ${{ env.WOLFPROV_PACKAGES_PATH }}/*.dsc
119- ${{ env.WOLFPROV_PACKAGES_PATH }}/*.tar.gz
120194 retention-days : 1
0 commit comments