Skip to content

Commit

Permalink
Replace Fastlane with Shell scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
danielsaidi committed Oct 6, 2024
1 parent 82072c3 commit be3aeda
Show file tree
Hide file tree
Showing 17 changed files with 403 additions and 110 deletions.
2 changes: 1 addition & 1 deletion .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
github: danielsaidi
github: [danielsaidi]
25 changes: 7 additions & 18 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,19 @@ name: Build Runner

on:
push:
branches: ["master"]
branches: ["main"]
pull_request:
branches: ["master"]

env:
SCHEME: SystemNotification
branches: ["main"]

jobs:
build:
runs-on: macos-13
runs-on: macos-15
steps:
- uses: actions/checkout@v3
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '15.1.0'
- name: Build iOS
run: xcodebuild -scheme $SCHEME -derivedDataPath .build -destination 'generic/platform=iOS';
- name: Build macOS
run: xcodebuild -scheme $SCHEME -derivedDataPath .build -destination 'generic/platform=OS X';
- name: Build tvOS
run: xcodebuild -scheme $SCHEME -derivedDataPath .build -destination 'generic/platform=tvOS';
- name: Build watchOS
run: xcodebuild -scheme $SCHEME -derivedDataPath .build -destination 'generic/platform=watchOS';
- name: Build visionOS
run: xcodebuild -scheme $SCHEME -derivedDataPath .build -destination 'generic/platform=xrOS';
xcode-version: '16.0'
- name: Build all platforms
run: bash scripts/build.sh ${{ github.event.repository.name }}
- name: Test iOS
run: xcodebuild test -scheme $SCHEME -derivedDataPath .build -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' -enableCodeCoverage YES;
run: bash scripts/test.sh ${{ github.event.repository.name }}
23 changes: 6 additions & 17 deletions .github/workflows/docc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ name: DocC Runner

on:
push:
branches: ["master"]
branches: ["main"]

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
Expand All @@ -24,34 +24,23 @@ jobs:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: macos-13
runs-on: macos-15
steps:
- name: Checkout
uses: actions/checkout@v3
- id: pages
name: Setup Pages
uses: actions/configure-pages@v4
- name: Select Xcode 15.1
- name: Select Xcode version
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '15.1.0'
xcode-version: '16.0'
- name: Build DocC
run: |
swift package resolve;
xcodebuild docbuild -scheme SystemNotification -derivedDataPath /tmp/docbuild -destination 'generic/platform=iOS';
$(xcrun --find docc) process-archive \
transform-for-static-hosting /tmp/docbuild/Build/Products/Debug-iphoneos/SystemNotification.doccarchive \
--output-path docs \
--hosting-base-path 'SystemNotification';
echo "<script>window.location.href += \"/documentation/systemnotification\"</script>" > docs/index.html;
run: bash scripts/docc.sh ${{ github.event.repository.name }}
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: 'docs'
path: '.build/docs'
- id: deployment
name: Deploy to GitHub Pages
uses: actions/deploy-pages@v4
19 changes: 2 additions & 17 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,21 +1,6 @@
# SPM defaults
.DS_Store
/.build
/Packages
.swiftpm/

# Documentation
Docs
documentation
downloads
videos

# Fastlane
Fastlane/report.xml
Fastlane/Preview.html
Fastlane/screenshots
Fastlane/test_output
Fastlane/README.md

# Xcode
**/xcuserdata
xcuserdata/
DerivedData/
54 changes: 0 additions & 54 deletions Fastlane/Fastfile

This file was deleted.

3 changes: 0 additions & 3 deletions Version

This file was deleted.

47 changes: 47 additions & 0 deletions scripts/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/bin/bash

# Documentation:
# This script builds a <TARGET> for all supported platforms.

# Exit immediately if a command exits with a non-zero status
set -e

# Verify that all required arguments are provided
if [ $# -eq 0 ]; then
echo "Error: This script requires exactly one argument"
echo "Usage: $0 <TARGET>"
exit 1
fi

# Create local argument variables.
TARGET=$1

# Use the script folder to refer to other scripts.
FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
SCRIPT="$FOLDER/build_platform.sh"

# Make the script executable
chmod +x $SCRIPT

# A function that builds a specific platform
build_platform() {
local platform=$1
echo "Building for $platform..."
if ! bash $SCRIPT $TARGET $platform; then
echo "Failed to build $platform"
return 1
fi
echo "Successfully built $platform"
}

# Array of platforms to build
platforms=("iOS" "macOS" "tvOS" "watchOS" "xrOS")

# Loop through platforms and build
for platform in "${platforms[@]}"; do
if ! build_platform "$platform"; then
exit 1
fi
done

echo "All platforms built successfully!"
16 changes: 16 additions & 0 deletions scripts/build_platform.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash

# Documentation:
# This script builds a <TARGET> for a specific <PLATFORM>.

# Verify that all required arguments are provided
if [ $# -ne 2 ]; then
echo "Error: This script requires exactly two arguments"
echo "Usage: $0 <TARGET> <PLATFORM>"
exit 1
fi

TARGET=$1
PLATFORM=$2

xcodebuild -scheme $TARGET -derivedDataPath .build -destination generic/platform=$PLATFORM
26 changes: 26 additions & 0 deletions scripts/docc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash

# Documentation:
# This script build DocC for a <TARGET>.
# The documentation ends up in to .build/docs.

# Verify that all required arguments are provided
if [ $# -eq 0 ]; then
echo "Error: This script requires exactly one argument"
echo "Usage: $0 <TARGET>"
exit 1
fi

TARGET=$1
TARGET_LOWERCASED=$(echo "$1" | tr '[:upper:]' '[:lower:]')

swift package resolve;

xcodebuild docbuild -scheme $1 -derivedDataPath /tmp/docbuild -destination 'generic/platform=iOS';

$(xcrun --find docc) process-archive \
transform-for-static-hosting /tmp/docbuild/Build/Products/Debug-iphoneos/$1.doccarchive \
--output-path .build/docs \
--hosting-base-path "$TARGET";

echo "<script>window.location.href += \"/documentation/$TARGET_LOWERCASED\"</script>" > .build/docs/index.html;
47 changes: 47 additions & 0 deletions scripts/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/bin/bash

# Documentation:
# This script tests a <TARGET> for all supported platforms.

# Exit immediately if a command exits with a non-zero status
set -e

# Verify that all required arguments are provided
if [ $# -eq 0 ]; then
echo "Error: This script requires exactly one argument"
echo "Usage: $0 <TARGET>"
exit 1
fi

# Create local argument variables.
TARGET=$1

# Use the script folder to refer to other scripts.
FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
SCRIPT="$FOLDER/test_platform.sh"

# Make the script executable
chmod +x $SCRIPT

# A function that tests a specific platform
test_platform() {
local platform=$1
echo "Testing for $platform..."
if ! bash $SCRIPT $TARGET $platform; then
echo "Failed to test $platform"
return 1
fi
echo "Successfully tested $platform"
}

# Array of platforms to test
platforms=("platform=iOS_Simulator,name=iPhone_16")

# Loop through platforms and build
for platform in "${platforms[@]}"; do
if ! test_platform "$platform"; then
exit 1
fi
done

echo "All platforms tested successfully!"
17 changes: 17 additions & 0 deletions scripts/test_platform.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

# Documentation:
# This script tests a <TARGET> for a specific platform.
# Use _ instead of spaces when passing in the <PLATFORM>.

# Verify that all required arguments are provided
if [ $# -ne 2 ]; then
echo "Error: This script requires exactly two arguments"
echo "Usage: $0 <TARGET> <PLATFORM>"
exit 1
fi

TARGET=$1
PLATFORM="${2//_/ }"

xcodebuild test -scheme $TARGET -derivedDataPath .build -destination "$PLATFORM" -enableCodeCoverage YES;
58 changes: 58 additions & 0 deletions scripts/version_create.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/bin/bash

# Documentation:
# This script creates a new project version for the provided <BUILD_TARGET> and <GIT_BRANCH>.

# Exit immediately if a command exits with a non-zero status
set -e

# Verify that all required arguments are provided
if [ $# -ne 2 ]; then
echo "Error: This script requires exactly two arguments"
echo "Usage: $0 <BUILD_TARGET> <GIT_BRANCH>"
exit 1
fi

# Create local argument variables.
BUILD_TARGET="$1"
GIT_BRANCH="$2"

# Use the script folder to refer to the platform script.
FOLDER="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
VALIDATE_GIT="$FOLDER/version_validate_git.sh"
VALIDATE_PROJECT="$FOLDER/version_validate_project.sh"
VERSION_BUMP="$FOLDER/version_number_bump.sh"

# A function that run a certain script and checks for errors
run_script() {
local script="$1"
shift # Remove the first argument (the script path)

if [ ! -f "$script" ]; then
echo "Error: Script not found: $script"
exit 1
fi

chmod +x "$script"
if ! "$script" "$@"; then
echo "Error: Script $script failed"
exit 1
fi
}


# Execute the pipeline steps
echo "Starting pipeline for BUILD_TARGET: $BUILD_TARGET, GIT_BRANCH: $GIT_BRANCH"

echo "Validating Git..."
run_script "$VALIDATE_GIT" "$GIT_BRANCH"

echo "Validating Project..."
run_script "$VALIDATE_PROJECT" "$BUILD_TARGET"

echo "Bumping version..."
run_script "$VERSION_BUMP"

echo ""
echo "Version created successfully!"
echo ""
Loading

0 comments on commit be3aeda

Please sign in to comment.