Update release pipelines to upload release artifacts
7
.github/actions/archive/action.yml
vendored
|
|
@ -26,9 +26,12 @@ runs:
|
||||||
run: |
|
run: |
|
||||||
echo "${{ inputs.app-store-key }}" > AuthKey_${{ inputs.app-store-key-id }}.p8
|
echo "${{ inputs.app-store-key }}" > AuthKey_${{ inputs.app-store-key-id }}.p8
|
||||||
|
|
||||||
xcodebuild archive \
|
xcodebuild clean archive \
|
||||||
-allowProvisioningUpdates \
|
-allowProvisioningUpdates \
|
||||||
-allowProvisioningDeviceRegistration \
|
-allowProvisioningDeviceRegistration \
|
||||||
|
-skipPackagePluginValidation \
|
||||||
|
-skipMacroValidation \
|
||||||
|
-onlyUsePackageVersionsFromResolvedFile \
|
||||||
-authenticationKeyID ${{ inputs.app-store-key-id }} \
|
-authenticationKeyID ${{ inputs.app-store-key-id }} \
|
||||||
-authenticationKeyIssuerID ${{ inputs.app-store-key-issuer-id }} \
|
-authenticationKeyIssuerID ${{ inputs.app-store-key-issuer-id }} \
|
||||||
-authenticationKeyPath "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8" \
|
-authenticationKeyPath "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8" \
|
||||||
|
|
@ -38,6 +41,4 @@ runs:
|
||||||
-archivePath '${{ inputs.archive-path }}' \
|
-archivePath '${{ inputs.archive-path }}' \
|
||||||
-resultBundlePath BuildResults.xcresult
|
-resultBundlePath BuildResults.xcresult
|
||||||
|
|
||||||
./Tools/xcresulttool-github BuildResults.xcresult
|
|
||||||
|
|
||||||
rm -rf AuthKey_${{ inputs.app-store-key-id }}.p8
|
rm -rf AuthKey_${{ inputs.app-store-key-id }}.p8
|
||||||
|
|
|
||||||
2
.github/actions/build-for-testing/action.yml
vendored
|
|
@ -18,7 +18,7 @@ inputs:
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- name: Cache Swift Packages
|
- name: Xcode Cache
|
||||||
uses: actions/cache@v3
|
uses: actions/cache@v3
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
|
|
|
||||||
5
.github/actions/export/action.yml
vendored
|
|
@ -1,4 +1,4 @@
|
||||||
name: Notarize
|
name: Export
|
||||||
inputs:
|
inputs:
|
||||||
app-store-key:
|
app-store-key:
|
||||||
description: App Store key in PEM PKCS#8 format
|
description: App Store key in PEM PKCS#8 format
|
||||||
|
|
@ -24,8 +24,7 @@ inputs:
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- id: notarize
|
- shell: bash
|
||||||
shell: bash
|
|
||||||
working-directory: Apple
|
working-directory: Apple
|
||||||
run: |
|
run: |
|
||||||
echo "${{ inputs.app-store-key }}" > AuthKey_${{ inputs.app-store-key-id }}.p8
|
echo "${{ inputs.app-store-key }}" > AuthKey_${{ inputs.app-store-key-id }}.p8
|
||||||
|
|
|
||||||
58
.github/actions/notarize/action.yml
vendored
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
name: Notarize
|
||||||
|
inputs:
|
||||||
|
app-store-key:
|
||||||
|
description: App Store key in PEM PKCS#8 format
|
||||||
|
required: true
|
||||||
|
app-store-key-id:
|
||||||
|
description: App Store key ID
|
||||||
|
required: true
|
||||||
|
app-store-key-issuer-id:
|
||||||
|
description: App Store key issuer ID
|
||||||
|
required: true
|
||||||
|
archive-path:
|
||||||
|
description: Xcode archive path
|
||||||
|
required: true
|
||||||
|
export-path:
|
||||||
|
description: The path to export the archive to
|
||||||
|
required: true
|
||||||
|
outputs:
|
||||||
|
notarized-app:
|
||||||
|
description: The compressed and notarized app
|
||||||
|
value: ${{ steps.notarize.outputs.notarized-app }}
|
||||||
|
runs:
|
||||||
|
using: composite
|
||||||
|
steps:
|
||||||
|
- id: notarize
|
||||||
|
shell: bash
|
||||||
|
working-directory: Apple
|
||||||
|
run: |
|
||||||
|
echo "${{ inputs.app-store-key }}" > AuthKey_${{ inputs.app-store-key-id }}.p8
|
||||||
|
|
||||||
|
echo '{"destination":"upload","method":"developer-id"}' \
|
||||||
|
| plutil -convert xml1 -o ExportOptions.plist -
|
||||||
|
|
||||||
|
xcodebuild \
|
||||||
|
-exportArchive \
|
||||||
|
-allowProvisioningUpdates \
|
||||||
|
-allowProvisioningDeviceRegistration \
|
||||||
|
-authenticationKeyID ${{ inputs.app-store-key-id }} \
|
||||||
|
-authenticationKeyIssuerID ${{ inputs.app-store-key-issuer-id }} \
|
||||||
|
-authenticationKeyPath "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8" \
|
||||||
|
-archivePath '${{ inputs.archive-path }}' \
|
||||||
|
-exportOptionsPlist ExportOptions.plist
|
||||||
|
|
||||||
|
until xcodebuild \
|
||||||
|
-exportNotarizedApp \
|
||||||
|
-allowProvisioningUpdates \
|
||||||
|
-allowProvisioningDeviceRegistration \
|
||||||
|
-authenticationKeyID ${{ inputs.app-store-key-id }} \
|
||||||
|
-authenticationKeyIssuerID ${{ inputs.app-store-key-issuer-id }} \
|
||||||
|
-authenticationKeyPath "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8" \
|
||||||
|
-archivePath '${{ inputs.archive-path }}' \
|
||||||
|
-exportPath ${{ inputs.export-path }}
|
||||||
|
do
|
||||||
|
echo "Failed to export app, trying again in 10s..."
|
||||||
|
sleep 10
|
||||||
|
done
|
||||||
|
|
||||||
|
rm -rf AuthKey_${{ inputs.app-store-key-id }}.p8 ExportOptions.plist
|
||||||
|
|
@ -18,9 +18,6 @@ inputs:
|
||||||
runs:
|
runs:
|
||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- shell: bash
|
|
||||||
id: vars
|
|
||||||
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
|
||||||
- shell: bash
|
- shell: bash
|
||||||
working-directory: Apple
|
working-directory: Apple
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -28,10 +25,10 @@ runs:
|
||||||
-scheme '${{ inputs.scheme }}' \
|
-scheme '${{ inputs.scheme }}' \
|
||||||
-destination '${{ inputs.destination }}' \
|
-destination '${{ inputs.destination }}' \
|
||||||
${{ inputs.test-plan && '-testPlan ' }}${{ inputs.test-plan }} \
|
${{ inputs.test-plan && '-testPlan ' }}${{ inputs.test-plan }} \
|
||||||
-resultBundlePath "${{ inputs.artifact-prefix }}-${{ steps.vars.outputs.sha_short }}.xcresult"
|
-resultBundlePath "${{ inputs.artifact-prefix }}.xcresult"
|
||||||
- uses: kishikawakatsumi/xcresulttool@v1
|
- uses: kishikawakatsumi/xcresulttool@v1
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
path: Apple/${{ inputs.artifact-prefix }}-${{ steps.vars.outputs.sha_short }}.xcresult
|
path: Apple/${{ inputs.artifact-prefix }}.xcresult
|
||||||
title: ${{ inputs.check-name }}
|
title: ${{ inputs.check-name }}
|
||||||
show-passed-tests: false
|
show-passed-tests: false
|
||||||
|
|
|
||||||
7
.github/workflows/build-appimage.yml
vendored
|
|
@ -1,8 +1,11 @@
|
||||||
name: Build AppImage
|
name: Build AppImage
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [main]
|
branches:
|
||||||
|
- main
|
||||||
pull_request:
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- "*"
|
||||||
jobs:
|
jobs:
|
||||||
appimage:
|
appimage:
|
||||||
name: Build AppImage
|
name: Build AppImage
|
||||||
|
|
@ -17,7 +20,7 @@ jobs:
|
||||||
docker cp temp:/app/burrow-gtk/build-appimage/Burrow-x86_64.AppImage .
|
docker cp temp:/app/burrow-gtk/build-appimage/Burrow-x86_64.AppImage .
|
||||||
docker rm temp
|
docker rm temp
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
|
name: Upload to GitHub
|
||||||
with:
|
with:
|
||||||
name: AppImage
|
name: AppImage
|
||||||
path: Burrow-x86_64.AppImage
|
path: Burrow-x86_64.AppImage
|
||||||
|
|
||||||
|
|
|
||||||
9
.github/workflows/build-apple.yml
vendored
|
|
@ -1,4 +1,4 @@
|
||||||
name: Apple Build
|
name: Build Apple Apps
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
|
|
@ -12,7 +12,7 @@ concurrency:
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build App (${{ matrix.platform }})
|
name: Build App (${{ matrix.platform }})
|
||||||
runs-on: macos-13
|
runs-on: macos-14
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
|
@ -53,7 +53,6 @@ jobs:
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-toolchain@stable
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
|
||||||
targets: ${{ join(matrix.rust-targets, ', ') }}
|
targets: ${{ join(matrix.rust-targets, ', ') }}
|
||||||
- name: Build
|
- name: Build
|
||||||
id: build
|
id: build
|
||||||
|
|
@ -64,7 +63,7 @@ jobs:
|
||||||
app-store-key: ${{ secrets.APPSTORE_KEY }}
|
app-store-key: ${{ secrets.APPSTORE_KEY }}
|
||||||
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
||||||
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
|
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
|
||||||
- name: Xcode Unit Test
|
- name: Run Unit Tests
|
||||||
if: ${{ matrix.xcode-unit-test != '' }}
|
if: ${{ matrix.xcode-unit-test != '' }}
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
uses: ./.github/actions/test-without-building
|
uses: ./.github/actions/test-without-building
|
||||||
|
|
@ -74,7 +73,7 @@ jobs:
|
||||||
test-plan: ${{ matrix.xcode-unit-test }}
|
test-plan: ${{ matrix.xcode-unit-test }}
|
||||||
artifact-prefix: unit-tests-${{ matrix.sdk-name }}
|
artifact-prefix: unit-tests-${{ matrix.sdk-name }}
|
||||||
check-name: Xcode Unit Tests (${{ matrix.platform }})
|
check-name: Xcode Unit Tests (${{ matrix.platform }})
|
||||||
- name: Xcode UI Test
|
- name: Run UI Tests
|
||||||
if: ${{ matrix.xcode-ui-test != '' }}
|
if: ${{ matrix.xcode-ui-test != '' }}
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
uses: ./.github/actions/test-without-building
|
uses: ./.github/actions/test-without-building
|
||||||
|
|
|
||||||
1
.github/workflows/build-docker.yml
vendored
|
|
@ -33,6 +33,7 @@ jobs:
|
||||||
images: ghcr.io/${{ github.repository }}
|
images: ghcr.io/${{ github.repository }}
|
||||||
tags: |
|
tags: |
|
||||||
type=sha
|
type=sha
|
||||||
|
type=match,pattern=builds/(.*),group=1
|
||||||
type=raw,value=latest,enable={{is_default_branch}}
|
type=raw,value=latest,enable={{is_default_branch}}
|
||||||
- name: Build and Push
|
- name: Build and Push
|
||||||
uses: docker/build-push-action@v4
|
uses: docker/build-push-action@v4
|
||||||
|
|
|
||||||
8
.github/workflows/build-rpm.yml
vendored
|
|
@ -1,10 +1,5 @@
|
||||||
|
on: workflow_dispatch
|
||||||
name: Build RPM
|
name: Build RPM
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ "main" ]
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- "*"
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build RPM
|
name: Build RPM
|
||||||
|
|
@ -20,4 +15,3 @@ jobs:
|
||||||
strip -s target/release/burrow
|
strip -s target/release/burrow
|
||||||
- name: Build RPM
|
- name: Build RPM
|
||||||
run: cargo generate-rpm -p burrow
|
run: cargo generate-rpm -p burrow
|
||||||
|
|
||||||
|
|
|
||||||
2
.github/workflows/build-rust.yml
vendored
|
|
@ -1,4 +1,4 @@
|
||||||
name: Rust Build
|
name: Build Rust Crate
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
|
|
|
||||||
21
.github/workflows/lint-git.yml
vendored
|
|
@ -8,13 +8,14 @@ jobs:
|
||||||
name: Git Lint
|
name: Git Lint
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- name: Checkout
|
||||||
with:
|
uses: actions/checkout@v4
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
with:
|
||||||
fetch-depth: 0
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
- name: Install Gitlint
|
fetch-depth: 0
|
||||||
shell: bash
|
- name: Install
|
||||||
run: python -m pip install gitlint
|
shell: bash
|
||||||
- name: Run Gitlint
|
run: python -m pip install gitlint
|
||||||
shell: bash
|
- name: Lint
|
||||||
run: gitlint --commits "${{ github.event.pull_request.base.sha }}..HEAD"
|
shell: bash
|
||||||
|
run: gitlint --commits "${{ github.event.pull_request.base.sha }}..HEAD"
|
||||||
|
|
|
||||||
7
.github/workflows/lint-swift.yml
vendored
|
|
@ -1,8 +1,5 @@
|
||||||
name: Swift Lint
|
name: Swift Lint
|
||||||
on:
|
on:
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- "*"
|
- "*"
|
||||||
|
|
@ -14,8 +11,6 @@ jobs:
|
||||||
image: ghcr.io/realm/swiftlint:latest
|
image: ghcr.io/realm/swiftlint:latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
ssh-key: ${{ secrets.DEPLOY_KEY }}
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
run: swiftlint lint --reporter github-actions-logging
|
run: swiftlint lint --reporter github-actions-logging
|
||||||
|
|
|
||||||
29
.github/workflows/release-appimage.yml
vendored
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
name: Release (AppImage)
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- created
|
||||||
|
jobs:
|
||||||
|
appimage:
|
||||||
|
name: Build AppImage
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container: docker
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
docker build -t appimage-builder . -f burrow-gtk/build-aux/Dockerfile
|
||||||
|
docker create --name temp appimage-builder
|
||||||
|
docker cp temp:/app/burrow-gtk/build-appimage/Burrow-x86_64.AppImage .
|
||||||
|
docker rm temp
|
||||||
|
- name: Upload to GitHub
|
||||||
|
uses: SierraSoftworks/gh-releases@v1.0.7
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
release_tag: ${{ github.ref_name }}
|
||||||
|
overwrite: 'true'
|
||||||
|
files: |
|
||||||
|
Burrow-x86_64.AppImage
|
||||||
102
.github/workflows/release-apple.yml
vendored
|
|
@ -1,65 +1,115 @@
|
||||||
name: Build Apple Release
|
name: Release (Apple)
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
types:
|
types:
|
||||||
- created
|
- created
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build ${{ matrix.configuration['platform'] }} Release
|
name: Build ${{ matrix.platform }} Release
|
||||||
runs-on: macos-13
|
runs-on: macos-14
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
configuration:
|
include:
|
||||||
- scheme: App (iOS)
|
- destination: generic/platform=iOS
|
||||||
destination: generic/platform=iOS
|
|
||||||
platform: iOS
|
platform: iOS
|
||||||
method: ad-hoc
|
rust-targets:
|
||||||
artifact-file: Apple/Release/Burrow.ipa
|
- aarch64-apple-ios
|
||||||
- scheme: App (macOS)
|
- destination: generic/platform=macOS
|
||||||
destination: generic/platform=macOS
|
|
||||||
platform: macOS
|
platform: macOS
|
||||||
method: mac-application
|
rust-targets:
|
||||||
artifact-file: Burrow.app.txz
|
- x86_64-apple-darwin
|
||||||
|
- aarch64-apple-darwin
|
||||||
env:
|
env:
|
||||||
DEVELOPER_DIR: /Applications/Xcode_15.2.app/Contents/Developer
|
DEVELOPER_DIR: /Applications/Xcode_15.2.app/Contents/Developer
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
ssh-key: ${{ secrets.DEPLOY_KEY }}
|
fetch-depth: 0
|
||||||
submodules: recursive
|
|
||||||
- name: Import Certificate
|
- name: Import Certificate
|
||||||
uses: ./.github/actions/import-cert
|
uses: ./.github/actions/import-cert
|
||||||
with:
|
with:
|
||||||
certificate: ${{ secrets.DEVELOPER_CERT }}
|
certificate: ${{ secrets.DEVELOPER_CERT }}
|
||||||
password: ${{ secrets.DEVELOPER_CERT_PASSWORD }}
|
password: ${{ secrets.DEVELOPER_CERT_PASSWORD }}
|
||||||
|
- name: Install Rust
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
targets: ${{ join(matrix.rust-targets, ', ') }}
|
||||||
|
- name: Configure Version
|
||||||
|
shell: bash
|
||||||
|
run: Tools/version.sh
|
||||||
- name: Archive
|
- name: Archive
|
||||||
uses: ./.github/actions/archive
|
uses: ./.github/actions/archive
|
||||||
with:
|
with:
|
||||||
scheme: ${{ matrix.configuration['scheme'] }}
|
scheme: App
|
||||||
destination: ${{ matrix.configuration['destination'] }}
|
destination: ${{ matrix.destination }}
|
||||||
app-store-key: ${{ secrets.APPSTORE_KEY }}
|
app-store-key: ${{ secrets.APPSTORE_KEY }}
|
||||||
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
||||||
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
|
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
|
||||||
archive-path: Burrow.xcarchive
|
archive-path: Burrow.xcarchive
|
||||||
- name: Export Locally
|
- name: Notarize (macOS)
|
||||||
|
if: ${{ matrix.platform == 'macOS' }}
|
||||||
|
uses: ./.github/actions/notarize
|
||||||
|
with:
|
||||||
|
app-store-key: ${{ secrets.APPSTORE_KEY }}
|
||||||
|
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
||||||
|
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
|
||||||
|
archive-path: Burrow.xcarchive
|
||||||
|
- name: Export IPA (iOS)
|
||||||
|
if: ${{ matrix.platform == 'iOS' }}
|
||||||
uses: ./.github/actions/export
|
uses: ./.github/actions/export
|
||||||
with:
|
with:
|
||||||
method: ${{ matrix.configuration['method'] }}
|
method: ad-hoc
|
||||||
destination: export
|
destination: export
|
||||||
app-store-key: ${{ secrets.APPSTORE_KEY }}
|
app-store-key: ${{ secrets.APPSTORE_KEY }}
|
||||||
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
||||||
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
|
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
|
||||||
archive-path: Burrow.xcarchive
|
archive-path: Burrow.xcarchive
|
||||||
export-path: Release
|
export-path: Release
|
||||||
- name: Compress
|
- name: Compress (iOS)
|
||||||
if: ${{ matrix.configuration['platform'] == 'macOS' }}
|
if: ${{ matrix.platform == 'iOS' }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: tar --options xz:compression-level=9 -C Apple/Release -cJf Burrow.app.txz ./
|
run: |
|
||||||
- name: Attach Artifact
|
cp Apple/Release/Burrow.ipa Burrow.ipa
|
||||||
uses: SierraSoftworks/gh-releases@v1.0.6
|
aa archive -a lzma -b 8m -d Apple -subdir Burrow.xcarchive -o Burrow-${{ matrix.platform }}.xcarchive.aar
|
||||||
|
rm -rf Apple/Release
|
||||||
|
- name: Compress (macOS)
|
||||||
|
if: ${{ matrix.platform == 'macOS' }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
aa archive -a lzma -b 8m -d Apple/Release -subdir Burrow.app -o Burrow.app.aar
|
||||||
|
aa archive -a lzma -b 8m -d Apple -subdir Burrow.xcarchive -o Burrow-${{ matrix.platform }}.xcarchive.aar
|
||||||
|
rm -rf Apple/Release
|
||||||
|
- name: Upload to GitHub (iOS)
|
||||||
|
if: ${{ matrix.platform == 'iOS' }}
|
||||||
|
uses: SierraSoftworks/gh-releases@v1.0.7
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
overwrite: 'false'
|
release_tag: ${{ github.ref_name }}
|
||||||
files: ${{ matrix.configuration['artifact-file'] }}
|
overwrite: 'true'
|
||||||
|
files: |
|
||||||
|
Burrow.ipa
|
||||||
|
Burrow-${{ matrix.platform }}.xcarchive.aar
|
||||||
|
- name: Upload to GitHub (macOS)
|
||||||
|
if: ${{ matrix.platform == 'macOS' }}
|
||||||
|
uses: SierraSoftworks/gh-releases@v1.0.7
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
release_tag: ${{ github.ref_name }}
|
||||||
|
overwrite: 'true'
|
||||||
|
files: |
|
||||||
|
Burrow.aap.aar
|
||||||
|
Burrow-${{ matrix.platform }}.xcarchive.aar
|
||||||
|
- name: Upload to App Store Connect
|
||||||
|
uses: ./.github/actions/export
|
||||||
|
with:
|
||||||
|
method: app-store
|
||||||
|
destination: upload
|
||||||
|
app-store-key: ${{ secrets.APPSTORE_KEY }}
|
||||||
|
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
||||||
|
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
|
||||||
|
archive-path: Burrow.xcarchive
|
||||||
|
export-path: Release
|
||||||
|
|
|
||||||
21
.github/workflows/release-if-needed.yaml
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
name: Create Release If Needed
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 10 * * *'
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}
|
||||||
|
jobs:
|
||||||
|
create:
|
||||||
|
name: Create Release If Needed
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- shell: bash
|
||||||
|
run: |
|
||||||
|
if [[ $(Tools/version.sh status) == "dirty" ]]; then
|
||||||
|
gh workflow run release-now.yml
|
||||||
|
fi
|
||||||
17
.github/workflows/release-now.yml
vendored
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
name: Create Release
|
||||||
|
on: workflow_dispatch
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}
|
||||||
|
jobs:
|
||||||
|
create:
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }}
|
||||||
|
name: Create Release
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- shell: bash
|
||||||
|
run: Tools/version.sh increment
|
||||||
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/100.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/1024.png
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/114.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/120.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/128.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/144.png
Normal file
|
After Width: | Height: | Size: 6.4 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/152.png
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/16.png
Normal file
|
After Width: | Height: | Size: 684 B |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/167.png
Normal file
|
After Width: | Height: | Size: 7.7 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/172.png
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/180.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/196.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/20.png
Normal file
|
After Width: | Height: | Size: 927 B |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/216.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/256.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/29.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/32.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/40.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/48.png
Normal file
|
After Width: | Height: | Size: 2 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/50.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/512.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/55.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/57.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/58.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/60.png
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/64.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/72.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/76.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/80.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/87.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
Apple/App/Assets.xcassets/AppIcon.appiconset/88.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
|
|
@ -1,59 +1,340 @@
|
||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
"idiom" : "universal",
|
"filename" : "40.png",
|
||||||
"platform" : "ios",
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "60.png",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "29.png",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "58.png",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "87.png",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "80.png",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "120.png",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "57.png",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "57x57"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "114.png",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "57x57"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "120.png",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "60x60"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "180.png",
|
||||||
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "60x60"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "20.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "40.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "29.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "58.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "40.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "80.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "50.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "50x50"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "100.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "50x50"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "72.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "72x72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "144.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "72x72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "76.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "76x76"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "152.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "76x76"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "167.png",
|
||||||
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "83.5x83.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "1024.png",
|
||||||
|
"idiom" : "ios-marketing",
|
||||||
|
"scale" : "1x",
|
||||||
"size" : "1024x1024"
|
"size" : "1024x1024"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "16.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "1x",
|
"scale" : "1x",
|
||||||
"size" : "16x16"
|
"size" : "16x16"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "32.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "16x16"
|
"size" : "16x16"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "32.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "1x",
|
"scale" : "1x",
|
||||||
"size" : "32x32"
|
"size" : "32x32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "64.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "32x32"
|
"size" : "32x32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "128.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "1x",
|
"scale" : "1x",
|
||||||
"size" : "128x128"
|
"size" : "128x128"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "256.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "128x128"
|
"size" : "128x128"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "256.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "1x",
|
"scale" : "1x",
|
||||||
"size" : "256x256"
|
"size" : "256x256"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "512.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "256x256"
|
"size" : "256x256"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "512.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "1x",
|
"scale" : "1x",
|
||||||
"size" : "512x512"
|
"size" : "512x512"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"filename" : "1024.png",
|
||||||
"idiom" : "mac",
|
"idiom" : "mac",
|
||||||
"scale" : "2x",
|
"scale" : "2x",
|
||||||
"size" : "512x512"
|
"size" : "512x512"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "48.png",
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "notificationCenter",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "24x24",
|
||||||
|
"subtype" : "38mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "55.png",
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "notificationCenter",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "27.5x27.5",
|
||||||
|
"subtype" : "42mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "58.png",
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "companionSettings",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "87.png",
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "companionSettings",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "notificationCenter",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "33x33",
|
||||||
|
"subtype" : "45mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "80.png",
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "appLauncher",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "40x40",
|
||||||
|
"subtype" : "38mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "88.png",
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "appLauncher",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "44x44",
|
||||||
|
"subtype" : "40mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "appLauncher",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "46x46",
|
||||||
|
"subtype" : "41mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "100.png",
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "appLauncher",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "50x50",
|
||||||
|
"subtype" : "44mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "appLauncher",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "51x51",
|
||||||
|
"subtype" : "45mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "appLauncher",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "54x54",
|
||||||
|
"subtype" : "49mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "172.png",
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "quickLook",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "86x86",
|
||||||
|
"subtype" : "38mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "196.png",
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "quickLook",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "98x98",
|
||||||
|
"subtype" : "42mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "216.png",
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "quickLook",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "108x108",
|
||||||
|
"subtype" : "44mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "quickLook",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "117x117",
|
||||||
|
"subtype" : "45mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "watch",
|
||||||
|
"role" : "quickLook",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "129x129",
|
||||||
|
"subtype" : "49mm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename" : "1024.png",
|
||||||
|
"idiom" : "watch-marketing",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "1024x1024"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"info" : {
|
"info" : {
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@
|
||||||
D0BCC5FD2A086D4700AD070D /* NetworkExtension+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BCC5FC2A086D4700AD070D /* NetworkExtension+Async.swift */; };
|
D0BCC5FD2A086D4700AD070D /* NetworkExtension+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BCC5FC2A086D4700AD070D /* NetworkExtension+Async.swift */; };
|
||||||
D0BCC6082A0981FE00AD070D /* Tunnel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B98FC629FDC5B5004E7149 /* Tunnel.swift */; };
|
D0BCC6082A0981FE00AD070D /* Tunnel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B98FC629FDC5B5004E7149 /* Tunnel.swift */; };
|
||||||
D0BCC6092A09A03E00AD070D /* libburrow.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCC6032A09535900AD070D /* libburrow.a */; };
|
D0BCC6092A09A03E00AD070D /* libburrow.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCC6032A09535900AD070D /* libburrow.a */; };
|
||||||
D0BCC60A2A09A0B800AD070D /* build-rust.sh in Resources */ = {isa = PBXBuildFile; fileRef = D0B98FBF29FD8072004E7149 /* build-rust.sh */; };
|
|
||||||
D0FAB5922B818A5900F6A84B /* NetworkExtensionTunnel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FAB5912B818A5900F6A84B /* NetworkExtensionTunnel.swift */; };
|
D0FAB5922B818A5900F6A84B /* NetworkExtensionTunnel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FAB5912B818A5900F6A84B /* NetworkExtensionTunnel.swift */; };
|
||||||
D0FAB5962B818B2900F6A84B /* TunnelButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FAB5952B818B2900F6A84B /* TunnelButton.swift */; };
|
D0FAB5962B818B2900F6A84B /* TunnelButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FAB5952B818B2900F6A84B /* TunnelButton.swift */; };
|
||||||
D0FAB5982B818B8200F6A84B /* TunnelStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FAB5972B818B8200F6A84B /* TunnelStatusView.swift */; };
|
D0FAB5982B818B8200F6A84B /* TunnelStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FAB5972B818B8200F6A84B /* TunnelStatusView.swift */; };
|
||||||
|
|
@ -103,6 +102,7 @@
|
||||||
D020F66929E4AA74002790F6 /* App-macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "App-macOS.entitlements"; sourceTree = "<group>"; };
|
D020F66929E4AA74002790F6 /* App-macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "App-macOS.entitlements"; sourceTree = "<group>"; };
|
||||||
D032E6512B8A79C20006B8AD /* HackClub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HackClub.swift; sourceTree = "<group>"; };
|
D032E6512B8A79C20006B8AD /* HackClub.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HackClub.swift; sourceTree = "<group>"; };
|
||||||
D032E6532B8A79DA0006B8AD /* WireGuard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WireGuard.swift; sourceTree = "<group>"; };
|
D032E6532B8A79DA0006B8AD /* WireGuard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WireGuard.swift; sourceTree = "<group>"; };
|
||||||
|
D04A3E1D2BAF465F0043EC85 /* Version.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Version.xcconfig; sourceTree = "<group>"; };
|
||||||
D05B9F7229E39EEC008CB1F9 /* Burrow.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Burrow.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
D05B9F7229E39EEC008CB1F9 /* Burrow.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Burrow.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
D05B9F7529E39EEC008CB1F9 /* BurrowApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BurrowApp.swift; sourceTree = "<group>"; };
|
D05B9F7529E39EEC008CB1F9 /* BurrowApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BurrowApp.swift; sourceTree = "<group>"; };
|
||||||
D05B9F7729E39EEC008CB1F9 /* BurrowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BurrowView.swift; sourceTree = "<group>"; };
|
D05B9F7729E39EEC008CB1F9 /* BurrowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BurrowView.swift; sourceTree = "<group>"; };
|
||||||
|
|
@ -185,6 +185,7 @@
|
||||||
D020F64A29E4A452002790F6 /* App.xcconfig */,
|
D020F64A29E4A452002790F6 /* App.xcconfig */,
|
||||||
D020F66329E4A703002790F6 /* Extension.xcconfig */,
|
D020F66329E4A703002790F6 /* Extension.xcconfig */,
|
||||||
D020F64029E4A1FF002790F6 /* Compiler.xcconfig */,
|
D020F64029E4A1FF002790F6 /* Compiler.xcconfig */,
|
||||||
|
D04A3E1D2BAF465F0043EC85 /* Version.xcconfig */,
|
||||||
D020F64229E4A1FF002790F6 /* Info.plist */,
|
D020F64229E4A1FF002790F6 /* Info.plist */,
|
||||||
);
|
);
|
||||||
path = Configuration;
|
path = Configuration;
|
||||||
|
|
@ -318,6 +319,7 @@
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = D05B9F8129E39EED008CB1F9 /* Build configuration list for PBXNativeTarget "App" */;
|
buildConfigurationList = D05B9F8129E39EED008CB1F9 /* Build configuration list for PBXNativeTarget "App" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
D04A3E232BAF4AE50043EC85 /* Update Build Number */,
|
||||||
D05B9F6E29E39EEC008CB1F9 /* Sources */,
|
D05B9F6E29E39EEC008CB1F9 /* Sources */,
|
||||||
D05B9F6F29E39EEC008CB1F9 /* Frameworks */,
|
D05B9F6F29E39EEC008CB1F9 /* Frameworks */,
|
||||||
D05B9F7029E39EEC008CB1F9 /* Resources */,
|
D05B9F7029E39EEC008CB1F9 /* Resources */,
|
||||||
|
|
@ -384,7 +386,6 @@
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
D0BCC60A2A09A0B800AD070D /* build-rust.sh in Resources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
@ -400,6 +401,27 @@
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
D04A3E232BAF4AE50043EC85 /* Update Build Number */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"$(PROJECT_DIR)/../Tools/version.sh",
|
||||||
|
"$(PROJECT_DIR)/../.git",
|
||||||
|
);
|
||||||
|
name = "Update Build Number";
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
"$(PROJECT_DIR)/Configuration/Version.xcconfig",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"$PROJECT_DIR/../Tools/version.sh\"\n";
|
||||||
|
};
|
||||||
D0BCC60B2A09A0C100AD070D /* Compile Rust */ = {
|
D0BCC60B2A09A0C100AD070D /* Compile Rust */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
alwaysOutOfDate = 1;
|
alwaysOutOfDate = 1;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#include "Identity.xcconfig"
|
#include "Identity.xcconfig"
|
||||||
|
#include "Version.xcconfig"
|
||||||
|
|
||||||
SDKROOT = auto
|
SDKROOT = auto
|
||||||
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES
|
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES
|
||||||
|
|
@ -12,7 +13,6 @@ SUPPORTS_MACCATALYST = NO
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO
|
ALWAYS_SEARCH_USER_PATHS = NO
|
||||||
PRODUCT_NAME = $(TARGET_NAME:c99extidentifier)
|
PRODUCT_NAME = $(TARGET_NAME:c99extidentifier)
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = $(APP_BUNDLE_IDENTIFIER).$(PRODUCT_NAME)
|
PRODUCT_BUNDLE_IDENTIFIER = $(APP_BUNDLE_IDENTIFIER).$(PRODUCT_NAME)
|
||||||
CURRENT_PROJECT_VERSION = 1
|
|
||||||
MARKETING_VERSION = 0.1
|
MARKETING_VERSION = 0.1
|
||||||
|
|
||||||
SKIP_INSTALL = YES
|
SKIP_INSTALL = YES
|
||||||
|
|
|
||||||
0
Apple/Configuration/Version.xcconfig
Normal file
51
Tools/version.sh
Executable file
|
|
@ -0,0 +1,51 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export PATH="$PATH:/opt/homebrew/bin:/usr/local/bin:/etc/profiles/per-user/$USER/bin"
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
cd "$(dirname "${BASH_SOURCE[0]}")"/..
|
||||||
|
|
||||||
|
TAG_PREFIX="builds/"
|
||||||
|
|
||||||
|
CURRENT_BUILD=$(git tag --points-at HEAD | tail -n 1)
|
||||||
|
LATEST_BUILD="$TAG_PREFIX$(git tag -l "builds/[0-9]*" | cut -d'/' -f 2 | sort -n | tail -n 1)"
|
||||||
|
|
||||||
|
CURRENT_BUILD_NUMBER=${CURRENT_BUILD#$TAG_PREFIX}
|
||||||
|
LATEST_BUILD_NUMBER=${LATEST_BUILD#$TAG_PREFIX}
|
||||||
|
if [[ -z $LATEST_BUILD_NUMBER ]]; then
|
||||||
|
LATEST_BUILD_NUMBER="0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -z $LATEST_BUILD && $(git merge-base --is-ancestor $LATEST_BUILD HEAD) -ne 0 ]]; then
|
||||||
|
echo "error: HEAD is not descended from build $LATEST_BUILD_NUMBER" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
BUILD_NUMBER=$LATEST_BUILD_NUMBER
|
||||||
|
|
||||||
|
if [[ $# -gt 0 && "$1" == "increment" ]]; then
|
||||||
|
NEW_BUILD_NUMBER=$((LATEST_BUILD_NUMBER + 1))
|
||||||
|
NEW_TAG="$TAG_PREFIX$NEW_BUILD_NUMBER"
|
||||||
|
BUILD_NUMBER=$NEW_BUILD_NUMBER
|
||||||
|
|
||||||
|
git tag $NEW_TAG
|
||||||
|
git push --quiet origin $NEW_TAG
|
||||||
|
gh release create "$NEW_TAG" -t "Build $BUILD_NUMBER" --verify-tag --generate-notes >/dev/null
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z $(grep $BUILD_NUMBER Apple/Configuration/Version.xcconfig 2>/dev/null) ]]; then
|
||||||
|
echo "CURRENT_PROJECT_VERSION = $BUILD_NUMBER" > Apple/Configuration/Version.xcconfig
|
||||||
|
git update-index --assume-unchanged Apple/Configuration/Version.xcconfig
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $# -gt 0 && "$1" == "status" ]]; then
|
||||||
|
if [[ $CURRENT_BUILD_NUMBER -eq $LATEST_BUILD_NUMBER ]]; then
|
||||||
|
echo "clean"
|
||||||
|
else
|
||||||
|
echo "dirty"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo $BUILD_NUMBER
|
||||||