Build curl framework #704
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "Build curl framework" | |
on: | |
push: | |
branches: ["main"] | |
schedule: | |
- cron: "18 18 * * *" | |
workflow_dispatch: | |
permissions: | |
packages: read | |
contents: write | |
jobs: | |
query: | |
name: "Check for updates" | |
runs-on: macos-14 | |
outputs: | |
curl_version: ${{ steps.query.outputs.curl_version }} | |
openssl_version: ${{ steps.query.outputs.openssl_version }} | |
needs_update: ${{ steps.query.outputs.needs_update }} | |
steps: | |
- name: "Get latest release" | |
id: query | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
echo "Getting latest curl release..." | |
LATEST_OFFICIAL_CURL_RELEASE=$(curl -sS https://curl.se/info | grep 'Version:' | cut -d ' ' -f2) | |
LATEST_CURL_IOS_RELEASE=$(gh api /repos/tls-inspector/curl-ios/releases/latest --jq '.name') | |
if [ -z "$LATEST_OFFICIAL_CURL_RELEASE" ]; then | |
echo "::error ::Unable to determine latest curl version, aborting run" | |
exit 1 | |
fi | |
if [ -z "$LATEST_CURL_IOS_RELEASE" ]; then | |
echo "::error ::Unable to determine last published framework version, aborting run" | |
exit 1 | |
fi | |
echo "Getting latest openssl release..." | |
LATEST_OPENSSL_IOS_RELEASE=$(gh api /repos/tls-inspector/openssl-ios/releases/latest --jq '.name') | |
if [ -z "$LATEST_OPENSSL_IOS_RELEASE" ]; then | |
echo "::error ::Unable to determine last published framework version, aborting run" | |
exit 1 | |
fi | |
echo "curl_version=${LATEST_OFFICIAL_CURL_RELEASE}" >> $GITHUB_OUTPUT | |
echo "openssl_version=${LATEST_OPENSSL_IOS_RELEASE}" >> $GITHUB_OUTPUT | |
echo "::notice ::Latest curl release: ${LATEST_OFFICIAL_CURL_RELEASE}, last published framework: ${LATEST_CURL_IOS_RELEASE}" | |
if [[ "${LATEST_CURL_IOS_RELEASE}" != "${LATEST_OFFICIAL_CURL_RELEASE}" ]]; then | |
echo "Update available!" | |
echo "needs_update=yes" >> $GITHUB_OUTPUT | |
else | |
echo "No updates available" | |
echo "needs_update=no" >> $GITHUB_OUTPUT | |
fi | |
cat $GITHUB_OUTPUT | |
update: | |
name: "Compile" | |
needs: query | |
if: needs.query.outputs.needs_update == 'yes' | |
runs-on: macos-14 | |
outputs: | |
framework_checksum: ${{ steps.prepare.outputs.framework_checksum }} | |
steps: | |
- name: Checkout Source | |
id: checkout | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #pin v4.2.2 | |
- name: Compile Framework | |
id: compile | |
env: | |
CURL_VERSION: ${{ needs.query.outputs.curl_version }} | |
OPENSSL_VERSION: ${{ needs.query.outputs.openssl_version }} | |
run: | | |
gpg --import ./curl.asc | |
echo 'trusted-key 0x78E11C6B279D5C91' >> ~/.gnupg/gpg.conf | |
echo 'trusted-key 0xF9FEAFF9D34A1BDB' >> ~/.gnupg/gpg.conf | |
echo 'trusted-key 0x5CC908FDB71E12C2' >> ~/.gnupg/gpg.conf | |
VERIFY=1 ./build-ios.sh ${{ needs.query.outputs.curl_version }} | |
zip -r curl.xcframework.zip curl.xcframework/ | |
./inject_module_map.sh iphoneos | |
./inject_module_map.sh iphonesimulator | |
zip -r curl_swift.xcframework.zip curl.xcframework/ | |
- name: Capture Build Errors | |
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 #pin v4.6.0 | |
if: failure() | |
with: | |
name: build_output | |
path: build/*_build.log | |
- name: Prepare Release | |
id: prepare_release | |
run: | | |
echo "-----BEGIN EC PRIVATE KEY-----" >> private_key.pem | |
echo '${{ secrets.SIGNING_KEY }}' >> private_key.pem | |
echo "-----END EC PRIVATE KEY-----" >> private_key.pem | |
openssl dgst -sign private_key.pem -sha256 -out curl.xcframework.zip.sig curl.xcframework.zip | |
openssl dgst -sign private_key.pem -sha256 -out curl_swift.xcframework.zip.sig curl_swift.xcframework.zip | |
rm -f private_key.pem | |
- name: Make Release | |
id: make_release | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
gh release create -n "${{ needs.query.outputs.curl_version }}" -t "${{ needs.query.outputs.curl_version }}" ${{ needs.query.outputs.curl_version }} curl.xcframework.zip curl.xcframework.zip.sig curl_swift.xcframework.zip curl_swift.xcframework.zip.sig |