Update release pipelines to upload release artifacts
7
.github/actions/archive/action.yml
vendored
|
|
@ -26,9 +26,12 @@ runs:
|
|||
run: |
|
||||
echo "${{ inputs.app-store-key }}" > AuthKey_${{ inputs.app-store-key-id }}.p8
|
||||
|
||||
xcodebuild archive \
|
||||
xcodebuild clean archive \
|
||||
-allowProvisioningUpdates \
|
||||
-allowProvisioningDeviceRegistration \
|
||||
-skipPackagePluginValidation \
|
||||
-skipMacroValidation \
|
||||
-onlyUsePackageVersionsFromResolvedFile \
|
||||
-authenticationKeyID ${{ inputs.app-store-key-id }} \
|
||||
-authenticationKeyIssuerID ${{ inputs.app-store-key-issuer-id }} \
|
||||
-authenticationKeyPath "${PWD}/AuthKey_${{ inputs.app-store-key-id }}.p8" \
|
||||
|
|
@ -38,6 +41,4 @@ runs:
|
|||
-archivePath '${{ inputs.archive-path }}' \
|
||||
-resultBundlePath BuildResults.xcresult
|
||||
|
||||
./Tools/xcresulttool-github BuildResults.xcresult
|
||||
|
||||
rm -rf AuthKey_${{ inputs.app-store-key-id }}.p8
|
||||
|
|
|
|||
2
.github/actions/build-for-testing/action.yml
vendored
|
|
@ -18,7 +18,7 @@ inputs:
|
|||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Cache Swift Packages
|
||||
- name: Xcode Cache
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
|
|
|
|||
5
.github/actions/export/action.yml
vendored
|
|
@ -1,4 +1,4 @@
|
|||
name: Notarize
|
||||
name: Export
|
||||
inputs:
|
||||
app-store-key:
|
||||
description: App Store key in PEM PKCS#8 format
|
||||
|
|
@ -24,8 +24,7 @@ inputs:
|
|||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- id: notarize
|
||||
shell: bash
|
||||
- shell: bash
|
||||
working-directory: Apple
|
||||
run: |
|
||||
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:
|
||||
using: composite
|
||||
steps:
|
||||
- shell: bash
|
||||
id: vars
|
||||
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
||||
- shell: bash
|
||||
working-directory: Apple
|
||||
run: |
|
||||
|
|
@ -28,10 +25,10 @@ runs:
|
|||
-scheme '${{ inputs.scheme }}' \
|
||||
-destination '${{ inputs.destination }}' \
|
||||
${{ 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
|
||||
if: always()
|
||||
with:
|
||||
path: Apple/${{ inputs.artifact-prefix }}-${{ steps.vars.outputs.sha_short }}.xcresult
|
||||
path: Apple/${{ inputs.artifact-prefix }}.xcresult
|
||||
title: ${{ inputs.check-name }}
|
||||
show-passed-tests: false
|
||||
|
|
|
|||
7
.github/workflows/build-appimage.yml
vendored
|
|
@ -1,8 +1,11 @@
|
|||
name: Build AppImage
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
jobs:
|
||||
appimage:
|
||||
name: Build AppImage
|
||||
|
|
@ -17,7 +20,7 @@ jobs:
|
|||
docker cp temp:/app/burrow-gtk/build-appimage/Burrow-x86_64.AppImage .
|
||||
docker rm temp
|
||||
- uses: actions/upload-artifact@v4
|
||||
name: Upload to GitHub
|
||||
with:
|
||||
name: 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:
|
||||
push:
|
||||
branches:
|
||||
|
|
@ -12,7 +12,7 @@ concurrency:
|
|||
jobs:
|
||||
build:
|
||||
name: Build App (${{ matrix.platform }})
|
||||
runs-on: macos-13
|
||||
runs-on: macos-14
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
|
|
@ -53,7 +53,6 @@ jobs:
|
|||
- name: Install Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
toolchain: stable
|
||||
targets: ${{ join(matrix.rust-targets, ', ') }}
|
||||
- name: Build
|
||||
id: build
|
||||
|
|
@ -64,7 +63,7 @@ jobs:
|
|||
app-store-key: ${{ secrets.APPSTORE_KEY }}
|
||||
app-store-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
||||
app-store-key-issuer-id: ${{ secrets.APPSTORE_KEY_ISSUER_ID }}
|
||||
- name: Xcode Unit Test
|
||||
- name: Run Unit Tests
|
||||
if: ${{ matrix.xcode-unit-test != '' }}
|
||||
continue-on-error: true
|
||||
uses: ./.github/actions/test-without-building
|
||||
|
|
@ -74,7 +73,7 @@ jobs:
|
|||
test-plan: ${{ matrix.xcode-unit-test }}
|
||||
artifact-prefix: unit-tests-${{ matrix.sdk-name }}
|
||||
check-name: Xcode Unit Tests (${{ matrix.platform }})
|
||||
- name: Xcode UI Test
|
||||
- name: Run UI Tests
|
||||
if: ${{ matrix.xcode-ui-test != '' }}
|
||||
continue-on-error: true
|
||||
uses: ./.github/actions/test-without-building
|
||||
|
|
|
|||
1
.github/workflows/build-docker.yml
vendored
|
|
@ -33,6 +33,7 @@ jobs:
|
|||
images: ghcr.io/${{ github.repository }}
|
||||
tags: |
|
||||
type=sha
|
||||
type=match,pattern=builds/(.*),group=1
|
||||
type=raw,value=latest,enable={{is_default_branch}}
|
||||
- name: Build and Push
|
||||
uses: docker/build-push-action@v4
|
||||
|
|
|
|||
8
.github/workflows/build-rpm.yml
vendored
|
|
@ -1,10 +1,5 @@
|
|||
on: workflow_dispatch
|
||||
name: Build RPM
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
jobs:
|
||||
build:
|
||||
name: Build RPM
|
||||
|
|
@ -20,4 +15,3 @@ jobs:
|
|||
strip -s target/release/burrow
|
||||
- name: Build RPM
|
||||
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:
|
||||
push:
|
||||
branches:
|
||||
|
|
|
|||
21
.github/workflows/lint-git.yml
vendored
|
|
@ -8,13 +8,14 @@ jobs:
|
|||
name: Git Lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
- name: Install Gitlint
|
||||
shell: bash
|
||||
run: python -m pip install gitlint
|
||||
- name: Run Gitlint
|
||||
shell: bash
|
||||
run: gitlint --commits "${{ github.event.pull_request.base.sha }}..HEAD"
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
fetch-depth: 0
|
||||
- name: Install
|
||||
shell: bash
|
||||
run: python -m pip install gitlint
|
||||
- name: Lint
|
||||
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
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- "*"
|
||||
|
|
@ -14,8 +11,6 @@ jobs:
|
|||
image: ghcr.io/realm/swiftlint:latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ssh-key: ${{ secrets.DEPLOY_KEY }}
|
||||
uses: actions/checkout@v4
|
||||
- name: Lint
|
||||
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:
|
||||
release:
|
||||
types:
|
||||
- created
|
||||
jobs:
|
||||
build:
|
||||
name: Build ${{ matrix.configuration['platform'] }} Release
|
||||
runs-on: macos-13
|
||||
name: Build ${{ matrix.platform }} Release
|
||||
runs-on: macos-14
|
||||
permissions:
|
||||
contents: write
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
configuration:
|
||||
- scheme: App (iOS)
|
||||
destination: generic/platform=iOS
|
||||
include:
|
||||
- destination: generic/platform=iOS
|
||||
platform: iOS
|
||||
method: ad-hoc
|
||||
artifact-file: Apple/Release/Burrow.ipa
|
||||
- scheme: App (macOS)
|
||||
destination: generic/platform=macOS
|
||||
rust-targets:
|
||||
- aarch64-apple-ios
|
||||
- destination: generic/platform=macOS
|
||||
platform: macOS
|
||||
method: mac-application
|
||||
artifact-file: Burrow.app.txz
|
||||
rust-targets:
|
||||
- x86_64-apple-darwin
|
||||
- aarch64-apple-darwin
|
||||
env:
|
||||
DEVELOPER_DIR: /Applications/Xcode_15.2.app/Contents/Developer
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ssh-key: ${{ secrets.DEPLOY_KEY }}
|
||||
submodules: recursive
|
||||
fetch-depth: 0
|
||||
- name: Import Certificate
|
||||
uses: ./.github/actions/import-cert
|
||||
with:
|
||||
certificate: ${{ secrets.DEVELOPER_CERT }}
|
||||
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
|
||||
uses: ./.github/actions/archive
|
||||
with:
|
||||
scheme: ${{ matrix.configuration['scheme'] }}
|
||||
destination: ${{ matrix.configuration['destination'] }}
|
||||
scheme: App
|
||||
destination: ${{ matrix.destination }}
|
||||
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 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
|
||||
with:
|
||||
method: ${{ matrix.configuration['method'] }}
|
||||
method: ad-hoc
|
||||
destination: export
|
||||
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
|
||||
- name: Compress
|
||||
if: ${{ matrix.configuration['platform'] == 'macOS' }}
|
||||
- name: Compress (iOS)
|
||||
if: ${{ matrix.platform == 'iOS' }}
|
||||
shell: bash
|
||||
run: tar --options xz:compression-level=9 -C Apple/Release -cJf Burrow.app.txz ./
|
||||
- name: Attach Artifact
|
||||
uses: SierraSoftworks/gh-releases@v1.0.6
|
||||
run: |
|
||||
cp Apple/Release/Burrow.ipa Burrow.ipa
|
||||
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:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
overwrite: 'false'
|
||||
files: ${{ matrix.configuration['artifact-file'] }}
|
||||
release_tag: ${{ github.ref_name }}
|
||||
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" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"platform" : "ios",
|
||||
"filename" : "40.png",
|
||||
"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"
|
||||
},
|
||||
{
|
||||
"filename" : "16.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "16x16"
|
||||
},
|
||||
{
|
||||
"filename" : "32.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"size" : "16x16"
|
||||
},
|
||||
{
|
||||
"filename" : "32.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "32x32"
|
||||
},
|
||||
{
|
||||
"filename" : "64.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"size" : "32x32"
|
||||
},
|
||||
{
|
||||
"filename" : "128.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "128x128"
|
||||
},
|
||||
{
|
||||
"filename" : "256.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"size" : "128x128"
|
||||
},
|
||||
{
|
||||
"filename" : "256.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "256x256"
|
||||
},
|
||||
{
|
||||
"filename" : "512.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"size" : "256x256"
|
||||
},
|
||||
{
|
||||
"filename" : "512.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "1x",
|
||||
"size" : "512x512"
|
||||
},
|
||||
{
|
||||
"filename" : "1024.png",
|
||||
"idiom" : "mac",
|
||||
"scale" : "2x",
|
||||
"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" : {
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
D0BCC5FD2A086D4700AD070D /* NetworkExtension+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0BCC5FC2A086D4700AD070D /* NetworkExtension+Async.swift */; };
|
||||
D0BCC6082A0981FE00AD070D /* Tunnel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0B98FC629FDC5B5004E7149 /* Tunnel.swift */; };
|
||||
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 */; };
|
||||
D0FAB5962B818B2900F6A84B /* TunnelButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0FAB5952B818B2900F6A84B /* TunnelButton.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>"; };
|
||||
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>"; };
|
||||
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; };
|
||||
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>"; };
|
||||
|
|
@ -185,6 +185,7 @@
|
|||
D020F64A29E4A452002790F6 /* App.xcconfig */,
|
||||
D020F66329E4A703002790F6 /* Extension.xcconfig */,
|
||||
D020F64029E4A1FF002790F6 /* Compiler.xcconfig */,
|
||||
D04A3E1D2BAF465F0043EC85 /* Version.xcconfig */,
|
||||
D020F64229E4A1FF002790F6 /* Info.plist */,
|
||||
);
|
||||
path = Configuration;
|
||||
|
|
@ -318,6 +319,7 @@
|
|||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = D05B9F8129E39EED008CB1F9 /* Build configuration list for PBXNativeTarget "App" */;
|
||||
buildPhases = (
|
||||
D04A3E232BAF4AE50043EC85 /* Update Build Number */,
|
||||
D05B9F6E29E39EEC008CB1F9 /* Sources */,
|
||||
D05B9F6F29E39EEC008CB1F9 /* Frameworks */,
|
||||
D05B9F7029E39EEC008CB1F9 /* Resources */,
|
||||
|
|
@ -384,7 +386,6 @@
|
|||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
D0BCC60A2A09A0B800AD070D /* build-rust.sh in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
|
@ -400,6 +401,27 @@
|
|||
/* End PBXResourcesBuildPhase 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 */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
alwaysOutOfDate = 1;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "Identity.xcconfig"
|
||||
#include "Version.xcconfig"
|
||||
|
||||
SDKROOT = auto
|
||||
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES
|
||||
|
|
@ -12,7 +13,6 @@ SUPPORTS_MACCATALYST = NO
|
|||
ALWAYS_SEARCH_USER_PATHS = NO
|
||||
PRODUCT_NAME = $(TARGET_NAME:c99extidentifier)
|
||||
PRODUCT_BUNDLE_IDENTIFIER = $(APP_BUNDLE_IDENTIFIER).$(PRODUCT_NAME)
|
||||
CURRENT_PROJECT_VERSION = 1
|
||||
MARKETING_VERSION = 0.1
|
||||
|
||||
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
|
||||