Skip to content

Update build.yml

Update build.yml #4

Workflow file for this run

name: Xcode - Build
on:
push:
pull_request:
workflow_dispatch:
inputs:
release__nightly:
description: Create a nightly release
type: boolean
required: false
jobs:
build:
name: Build using xcodebuild command
runs-on: macos-latest
env:
scheme: OpenParsec
archive_path: archive
outputs:
scheme: ${{ steps.scheme.outputs.scheme }}
archive_path: ${{ env.archive_path }}
steps:
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '15.3'
- name: Checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Set Scheme
id: scheme
run: |
if [ $scheme = default ]
then
scheme_list=$(xcodebuild -list -json | tr -d "\n")
scheme=$(echo $scheme_list | ruby -e "require 'json'; puts JSON.parse(STDIN.gets)['project']['targets'][0]")
echo Using default scheme: $scheme
else
echo Using configured scheme: $scheme
fi
echo "scheme=$scheme" >> $GITHUB_OUTPUT
- name: Set filetype_parameter
id: filetype_parameter
run: |
filetype_parameter=`ls -A | grep -i \\.xcworkspace\$ && echo workspace || echo project`
echo "filetype_parameter=$filetype_parameter" >> $GITHUB_OUTPUT
- name: Set file_to_build
id: file_to_build
run: |
file_to_build=`ls -A | grep -i \\.xcworkspace\$ || ls -A | grep -i \\.xcodeproj\$`
file_to_build=`echo $file_to_build | awk '{$1=$1;print}'`
echo "file_to_build=$file_to_build" >> $GITHUB_OUTPUT
- name: Build
env:
scheme: ${{ steps.scheme.outputs.scheme }}
filetype_parameter: ${{ steps.filetype_parameter.outputs.filetype_parameter }}
file_to_build: ${{ steps.file_to_build.outputs.file_to_build }}
run: xcodebuild clean build -scheme "$scheme" -"$filetype_parameter" "$file_to_build" -sdk iphoneos -arch arm64 -configuration Release CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcpretty && exit ${PIPESTATUS[0]}
- name: Analyze
env:
scheme: ${{ steps.scheme.outputs.scheme }}
filetype_parameter: ${{ steps.filetype_parameter.outputs.filetype_parameter }}
file_to_build: ${{ steps.file_to_build.outputs.file_to_build }}
run: xcodebuild analyze -scheme "$scheme" -"$filetype_parameter" "$file_to_build" -sdk iphoneos -arch arm64 -configuration Release CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcpretty && exit ${PIPESTATUS[0]}
- name: Archive
env:
scheme: ${{ steps.scheme.outputs.scheme }}
filetype_parameter: ${{ steps.filetype_parameter.outputs.filetype_parameter }}
file_to_build: ${{ steps.file_to_build.outputs.file_to_build }}
run: xcodebuild archive -archivePath "$archive_path" -scheme "$scheme" -"$filetype_parameter" "$file_to_build" -sdk iphoneos -arch arm64 -configuration Release CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcpretty && exit ${PIPESTATUS[0]}
- name: Tar Build Artifact
run: tar -cvf "$archive_path.xcarchive.tar" "$archive_path.xcarchive"
- name: Upload a Build Artifact
uses: actions/upload-artifact@v3
with:
name: ${{ env.archive_path }}.xcarchive.tar
path: ${{ env.archive_path }}.xcarchive.tar
package:
name: Create fake-signed ipa
runs-on: ubuntu-latest
needs: [build]
env:
scheme: ${{ needs.build.outputs.scheme }}
archive_path: ${{ needs.build.outputs.archive_path }}
outputs:
artifact: ${{ env.scheme }}.ipa
steps:
- name: Download a Build Artifact
uses: actions/download-artifact@v3
with:
name: ${{ env.archive_path }}.xcarchive.tar
- name: Extract Build Artifact
run: tar -xf "$archive_path.xcarchive.tar"
- name: Install ldid
run: |
if [ `uname -s` = "Linux" ]; then
curl -sSL -o /usr/local/bin/ldid "${{ github.server_url }}/ProcursusTeam/ldid/releases/latest/download/ldid_linux_`uname -m`"
chmod +x /usr/local/bin/ldid
elif [ `uname -s` = "Darwin" ]; then
brew install ldid
else
exit 1
fi
- name: Fakesign
run: |
find "$archive_path.xcarchive/Products/Applications/$scheme.app" -type d -path '*/Frameworks/*.framework' -exec ldid -S \{\} \;
ldid -S "$archive_path.xcarchive/Products/Applications/$scheme.app"
- name: Create IPA
run: |
mv "$archive_path.xcarchive/Products/Applications" Payload
zip -r "$scheme.ipa" "Payload" -x "._*" -x ".DS_Store" -x "__MACOSX"
- name: Upload a Build Artifact
uses: actions/upload-artifact@v3
with:
name: ${{ env.scheme }}.ipa
path: ${{ env.scheme }}.ipa
release__nightly:
name: Nightly Release
permissions:
contents: write
if: inputs.release__nightly || github.event_name == 'push' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
runs-on: ubuntu-latest
needs: [package]
concurrency:
group: release__nightly
cancel-in-progress: true
steps:
- name: Download a Build Artifact
uses: actions/download-artifact@v3
with:
name: ${{ needs.package.outputs.artifact }}
- name: Nightly Release
uses: andelf/nightly-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
body: |
This is a nightly release [created automatically with GitHub Actions workflow](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}).
files: |
${{ needs.package.outputs.artifact }}