diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a6f0af8..e8b6e10 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -3,14 +3,96 @@ name: CI pipeline on: push jobs: - build: + debug: runs-on: macos-14 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + + - name: Build code + run: make debug + + release: + runs-on: macos-14 + environment: release-macos + + steps: + - uses: actions/checkout@v4 + + - name: Install the Apple certificate and provisioning profile + env: + BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} + P12_PASSWORD: ${{ secrets.P12_PASSWORD }} + BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }} + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + run: | + # create variables + CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12 + PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + + # import certificate profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH + + # create temporary keychain + security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + + # import certificate to keychain + security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH - name: Build code run: make release - name: Run check - run: make check + run: make check-release + + - uses: actions/upload-artifact@v4 + with: + name: qlview + path: build/Release/qlview + + - name: Clean up keychain + if: ${{ always() }} + run: | + security delete-keychain $RUNNER_TEMP/app-signing.keychain-db + + publish_release: + permissions: + contents: write + + runs-on: macos-14 + if: (startsWith(github.ref, 'refs/tags/v') && !contains(github.ref, '-dev')) + needs: [release] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Prepare release message + run: | + cat CHANGES | awk '/^[0-9]+\./{ n++; next; } n < 2 { print }' >${{ runner.temp }}/release-msg + echo "release_name=$(echo ${{ github.ref_name }} | sed 's/^v//')" >> $GITHUB_ENV + + - uses: actions/download-artifact@v4 + with: + path: artifacts + + - name: Display artifacts + run: ls -al artifacts/*/* + + - name: Upload artifacts + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + draft: false + prerelease: false + name: ${{ env.release_name }} + body_path: ${{ runner.temp }}/release-msg + files: | + artifacts/*/* diff --git a/CHANGES b/CHANGES index 0885808..b233c6d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,6 @@ -0.1-3 | 2024-01-20 22:29:20 +0100 +0.2 | 2024-02-03 21:21:52 +0100 + + * Extend CI setup to build releases. * Polish code infrastructure. @@ -9,7 +11,7 @@ open them in their corresponding applications first and print from there. - * Remove unneccessary state. + * Remove unnecessary state. 0.1 | 2024-01-07 15:03:19 +0100 diff --git a/Makefile b/Makefile index 2454208..19cb641 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,6 @@ debug: release: @xcodebuild -quiet -target qlview-signed -configuration Release -check: +check-release: codesign --verify --verbose build/Release/qlview codesign --display --verbose=4 build/Release/qlview 2>&1 | grep Signed diff --git a/VERSION b/VERSION index 2eaed16..3b04cfb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1-3 +0.2 diff --git a/qlview/Info.plist b/qlview/Info.plist index 9ab382b..1e7c574 100644 --- a/qlview/Info.plist +++ b/qlview/Info.plist @@ -9,6 +9,6 @@ CFBundleName qlview CFBundleVersion - 0.1-3 + 0.2