From 62b375f28323c89e775b1c0b59c302291e90b78d Mon Sep 17 00:00:00 2001 From: winebarrel Date: Sun, 17 Nov 2024 15:23:31 +0900 Subject: [PATCH] Add CI --- .github/workflows/ci.yml | 70 ++++++++++++++++++++++++++++++++++++++++ Makefile | 25 ++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 Makefile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..436da59 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,70 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + lint: + name: Lint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Lint + uses: norio-nomura/action-swiftlint@3.2.1 + + build: + name: Build and Analyse + runs-on: macos-14 + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Switch Xcode + run: sudo xcode-select -s /Applications/Xcode_16.app + - name: Install SwiftLint + env: + SWIFTLINT_VERSION: 0.57.0 + run: | + curl -sSfLO https://github.com/realm/SwiftLint/releases/download/${SWIFTLINT_VERSION}/portable_swiftlint.zip + unzip portable_swiftlint.zip swiftlint + - 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.provisionprofile + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + + # import certificate and provisioning profile from secrets + echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH + echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_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 + + # apply provisioning profile + mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles + cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles + - name: Build and Analyse + run: | + xcodebuild build analyze -scheme Pulse -destination 'generic/platform=macOS' -allowProvisioningUpdates -configuration Debug | tee build.log + - name: SwiftLint Analyse + run: | + ./swiftlint analyze --strict --compiler-log-path build.log diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d06a38e --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +BUILD_DIR = ./build +APP_NAME = Pulse +ARCHIVE_PATH = $(BUILD_DIR)/$(APP_NAME).xcarchive +CONFIGURATION = Release +BUILD_LOG = ./build.log + +.PHONY: build +build: clean + xcodebuild build analyze archive \ + -destination "generic/platform=macOS" \ + -scheme $(APP_NAME) \ + -configuration $(CONFIGURATION) \ + -archivePath $(ARCHIVE_PATH) \ + | tee $(BUILD_LOG) + +.PHONY: swiftlint-analyze +swiftlint-analyze: + $(MAKE) build CONFIGURATION=Debug + swiftlint analyze --strict --compiler-log-path $(BUILD_LOG) + +.PHONY: clean +clean: + rm -rf $(BUILD_DIR) + +# TODO: notary