99 openssl_ref :
1010 required : true
1111 type : string
12- outputs :
13- cache_key :
14- description : " Cache key for the build artifacts "
15- value : ${{ jobs.build_wolfprovider_common.outputs.cache_key }}
12+ replace_default :
13+ required : false
14+ type : boolean
15+ default : false
1616
1717jobs :
1818 build_wolfprovider_common :
@@ -24,14 +24,18 @@ jobs:
2424 env :
2525 DEBIAN_FRONTEND : noninteractive
2626 timeout-minutes : 20
27- outputs :
28- cache_key : wolfprov-${{ inputs.wolfssl_ref }}-${{ inputs.openssl_ref }}-${{ github.sha }}
27+ env :
28+ WOLFSSL_PACKAGES_PATH : /tmp/wolfssl-packages
29+ OPENSSL_PACKAGES_PATH : /tmp/openssl-packages
30+ WOLFPROV_PACKAGES_PATH : /tmp/wolfprov-packages
2931 steps :
30- - name : Set up environment
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
3135 run : |
32- apt-get update
33- apt-get install -y \
36+ apt-get update && apt-get install -y --no-install-recommends \
3437 build-essential \
38+ ccache \
3539 devscripts \
3640 debhelper \
3741 dh-autoreconf \
@@ -50,75 +54,166 @@ jobs:
5054 expect \
5155 xxd
5256
53- - name : Ensure the working directory safe
57+ # Experimental: use ccache
58+ - name : Setup ccache
59+ uses : hendrikmuhs/ccache-action@v1.2
60+ id : cc
61+ with :
62+ create-symlink : true
63+
64+ - name : Setup ccache environment variables
5465 run : |
55- git config --global --add safe.directory "$GITHUB_WORKSPACE"
66+ echo CC=ccache\ gcc >> "$GITHUB_ENV"
67+ echo CXX=ccache\ g++ >> "$GITHUB_ENV"
68+ echo CCACHE_BASEDIR=${GITHUB_WORKSPACE} >> "$GITHUB_ENV"
69+ echo CCACHE_NOHASHDIR=true >> "$GITHUB_ENV"
70+ echo CCACHE_COMPILERCHECK=content >> "$GITHUB_ENV"
71+ echo "CCACHE_DIR=${XDG_CACHE_HOME:-$HOME/.cache}/ccache" >> "$GITHUB_ENV"
72+ mkdir -p "${XDG_CACHE_HOME:-$HOME/.cache}/ccache"
73+
74+ - name : Sanity check ccache routing
75+ run : |
76+ set -x
77+ which -a gcc || true
78+ gcc --version | head -1
79+ ccache --zero-stats
80+ printf 'int main(){return 0;}\n' > t.c
81+ $CC -c t.c
82+ ccache -s
5683
5784 - name : Checkout wolfProvider
5885 uses : actions/checkout@v4
5986 with :
6087 fetch-depth : 1
88+ fetch-tags : true
6189
62- - name : Fetch tags (for Debian versioning)
90+ # Avoid "detected dubious ownership" warning
91+ - name : Ensure the working directory safe
6392 run : |
64- git fetch --tags --force --prune
93+ git config --global --add safe.directory "$GITHUB_WORKSPACE"
94+
95+ # When running on a fork the upstream tags are not present, so fetch them explicitly
96+ - name : Fetch tags from upstream(for Debian versioning)
97+ run : |
98+ git remote add upstream https://github.com/wolfSSL/wolfProvider.git || true
99+ git fetch upstream --tags --no-recurse-submodules
100+
101+ # Check for cached wolfSSL packages
102+ - name : Checking wolfSSL packages in cache
103+ uses : actions/cache@v4
104+ continue-on-error : true
105+ id : wolfssl-cache
106+ with :
107+ path : |
108+ ${{ env.WOLFSSL_PACKAGES_PATH }}
109+ key : wolfssl-debian-packages-${{ inputs.wolfssl_ref }}
110+ lookup-only : false
65111
66- - name : Install wolfSSL Debian packages from repo tarball
112+ # TODO: build wolfSSL from repo instead of using tarball, and cache it
113+ # Note: we are ignoring inputs.wolfssl_ref
114+ - name : Unpack wolfSSL packages
115+ if : steps.wolfssl-cache.outputs.cache-hit != 'true'
67116 run : |
68- mkdir -p "/tmp/wolfssl-pkg"
69- chmod +x $GITHUB_WORKSPACE/debian/install-wolfssl.sh
70117 $GITHUB_WORKSPACE/debian/install-wolfssl.sh \
71118 $GITHUB_WORKSPACE/.github/packages/debian-wolfssl.tar.gz \
72- "/tmp/wolfssl-pkg"
119+ ${{ env.WOLFSSL_PACKAGES_PATH }}
120+ mv ${{ env.WOLFSSL_PACKAGES_PATH }}/debian-packages/* ${{ env.WOLFSSL_PACKAGES_PATH }}
73121
74- # Stage wolfSSL debs into artifacts directory
75- mkdir -p "/tmp/wolfprov-packages"
76- echo "Moving wolfssl files to artifacts directory..."
77-
78- find /tmp/wolfssl-pkg -name "*wolfssl*" -type f -name "*.deb" -exec cp {} /tmp/wolfprov-packages/ \;
79- find /tmp/wolfssl-pkg -name "*wolfssl*" -type f -name "*.dsc" -exec cp {} /tmp/wolfprov-packages/ \;
80- find /tmp/wolfssl-pkg -name "*wolfssl*" -type f -name "*.tar.gz" -exec cp {} /tmp/wolfprov-packages/ \;
81- find /tmp/wolfssl-pkg -name "*wolfssl*" -type f -name "*.orig.tar.gz" -exec cp {} /tmp/wolfprov-packages/ \;
122+ - name : Install wolfSSL packages from cache
123+ run : |
124+ printf "Installing wolfSSL packages:\n"
125+ ls -la ${{ env.WOLFSSL_PACKAGES_PATH }}
126+ apt install --reinstall -y ${{ env.WOLFSSL_PACKAGES_PATH }}/*wolfssl*.deb
127+
128+ # Check for cached OpenSSL packages
129+ - name : Checking OpenSSL packages in cache
130+ uses : actions/cache@v4
131+ id : openssl-cache
132+ continue-on-error : true
133+ with :
134+ path : |
135+ ${{ env.OPENSSL_PACKAGES_PATH }}
136+ key : openssl-debian-packages-${{ inputs.openssl_ref }}${{ inputs.replace_default && '-replace-default' || '' }}
137+ lookup-only : false
82138
83- - name : Build Debian packages (wolfProvider + OpenSSL)
139+ # Install OpenSSL packages from cache if available
140+ - name : Install OpenSSL packages from cache
141+ if : steps.openssl-cache.outputs.cache-hit == 'true'
84142 run : |
85- yes Y | ./scripts/build-wolfprovider.sh --debian
143+ printf "Installing OpenSSL packages from cache:\n"
144+ ls -la ${{ env.OPENSSL_PACKAGES_PATH }}
145+ apt install --reinstall -y \
146+ ${{ env.OPENSSL_PACKAGES_PATH }}/openssl_*.deb \
147+ ${{ env.OPENSSL_PACKAGES_PATH }}/libssl3_*.deb \
148+ ${{ env.OPENSSL_PACKAGES_PATH }}/libssl-dev_*.deb
86149
87- echo "Generated packages in parent dir:"
88- ls -la ../ || true
89- ls -la ../*.deb ../*.dsc ../*.tar.gz 2>/dev/null || true
150+ - name : Build wolfProvider
151+ run : |
152+ WOLFSSL_TAG=${{ inputs.wolfssl_ref }} OPENSSL_TAG=${{ inputs.openssl_ref }} \
153+ yes "Y" | $GITHUB_WORKSPACE/scripts/build-wolfprovider.sh --debian \
154+ ${{ inputs.replace_default && '--replace-default' || '' }}
90155
91- - name : Collect package artifacts
156+ - name : Setup packages directory
92157 run : |
93- mkdir -p "/tmp/wolfprov-packages"
94- mv ../*.deb /tmp/wolfprov-packages/ 2>/dev/null || true
95- mv ../*.dsc /tmp/wolfprov-packages/ 2>/dev/null || true
96- mv ../*.tar.gz /tmp/wolfprov-packages/ 2>/dev/null || true
97- echo "Artifacts to upload:"
98- ls -la /tmp/wolfprov-packages || true
99-
100- - name : Upload wolfSSL packages
101- uses : actions/upload-artifact@v4
158+ printf "Listing parent directory:\n"
159+ ls -la $GITHUB_WORKSPACE/../
160+
161+ printf "Creating packages directory: ${{ env.WOLFPROV_PACKAGES_PATH }}\n"
162+ mkdir -p ${{ env.WOLFPROV_PACKAGES_PATH }}
163+ mkdir -p ${{ env.WOLFSSL_PACKAGES_PATH }}
164+ mkdir -p ${{ env.OPENSSL_PACKAGES_PATH }}
165+ cp $GITHUB_WORKSPACE/../*.deb ${{ env.WOLFSSL_PACKAGES_PATH }}
166+ cp $GITHUB_WORKSPACE/../*.dsc ${{ env.WOLFSSL_PACKAGES_PATH }}
167+ cp $GITHUB_WORKSPACE/../*.tar.gz ${{ env.WOLFSSL_PACKAGES_PATH }}
168+ cp $GITHUB_WORKSPACE/../*.deb ${{ env.OPENSSL_PACKAGES_PATH }}
169+ cp $GITHUB_WORKSPACE/../*.dsc ${{ env.OPENSSL_PACKAGES_PATH }}
170+ cp $GITHUB_WORKSPACE/../*.tar.gz ${{ env.OPENSSL_PACKAGES_PATH }}
171+ cp $GITHUB_WORKSPACE/../*.deb ${{ env.WOLFPROV_PACKAGES_PATH }}
172+ cp $GITHUB_WORKSPACE/../*.dsc ${{ env.WOLFPROV_PACKAGES_PATH }}
173+ cp $GITHUB_WORKSPACE/../*.tar.gz ${{ env.WOLFPROV_PACKAGES_PATH }}
174+
175+ printf "Listing packages directory:\n"
176+ ls -la ${{ env.WOLFPROV_PACKAGES_PATH }}
177+ ls -la ${{ env.WOLFSSL_PACKAGES_PATH }}
178+ ls -la ${{ env.OPENSSL_PACKAGES_PATH }}
179+
180+ - name : Save to cache
181+ uses : actions/cache/save@v4
182+ continue-on-error : true
102183 with :
103- name : wolfssl-debian-packages-${{ github.sha }}
104184 path : |
105- /tmp/wolfprov-packages/*wolfssl*.deb
106- retention-days : 7
185+ ${{ env.WOLFSSL_PACKAGES_PATH }}
186+ ${{ env.OPENSSL_PACKAGES_PATH }}
187+ ${{ env.WOLFPROV_PACKAGES_PATH }}
188+ key : openssl-wolfprov-debian-packages-${{ github.sha }}${{ inputs.replace_default && '-replace-default' || '' }}
107189
108- - name : Upload OpenSSL/wolfProvider packages
190+ # Save all packages in a single artifact for consumers
191+ # TODO: support debug builds
192+ - name : Upload wolfProvider artifacts
109193 uses : actions/upload-artifact@v4
194+ continue-on-error : true
110195 with :
111- name : openssl-wolfprov-debian-packages-${{ github.sha }}
196+ name : openssl-wolfprov-debian-packages-${{ github.sha }}${{ inputs.replace_default && '-replace-default' || '' }}
112197 path : |
113- /tmp/wolfprov-packages/*openssl*.deb
114- /tmp/wolfprov-packages/*libssl3*.deb
115- /tmp/wolfprov-packages/*libssl-dev*.deb
116- /tmp/wolfprov-packages/*libwolfprov*.deb
117- retention-days : 7
118-
119- - name : Print errors
120- if : ${{ failure() }}
121- run : |
122- if [ -f test-suite.log ] ; then
123- cat test-suite.log
124- fi
198+ ${{ env.WOLFSSL_PACKAGES_PATH }}/*.deb
199+ ${{ env.WOLFSSL_PACKAGES_PATH }}/*.dsc
200+ ${{ env.WOLFSSL_PACKAGES_PATH }}/*.tar.gz
201+ ${{ env.OPENSSL_PACKAGES_PATH }}/*.deb
202+ ${{ env.OPENSSL_PACKAGES_PATH }}/*.dsc
203+ ${{ env.OPENSSL_PACKAGES_PATH }}/*.tar.gz
204+ ${{ env.WOLFPROV_PACKAGES_PATH }}/*.deb
205+ ${{ env.WOLFPROV_PACKAGES_PATH }}/*.dsc
206+ ${{ env.WOLFPROV_PACKAGES_PATH }}/*.tar.gz
207+ retention-days : 1
208+
209+ # TODO: upload wolfSSL artifacts, after building
210+ # - name: Upload wolfSSL artifacts
211+ # uses: actions/upload-artifact@v4
212+ # with:
213+ # name: wolfssl-debian-packages-${{ inputs.wolfssl_ref }}
214+ # path: |
215+ # ${{ env.WOLFPROV_PACKAGES_PATH }}/*wolfssl*.deb
216+ # ${{ env.WOLFPROV_PACKAGES_PATH }}/*wolfssl*.dsc
217+ # ${{ env.WOLFPROV_PACKAGES_PATH }}/*wolfssl*.tar.gz
218+ # retention-days: 1
219+
0 commit comments