From e5f8d7e2fdb7f3d46dd60e71f6bf7ce27b1ab97f Mon Sep 17 00:00:00 2001 From: Daniel LaCosse <3759828+daniellacosse@users.noreply.github.com> Date: Mon, 14 Jul 2025 16:49:10 -0400 Subject: [PATCH 1/8] feat: add issue configuration and CI checks --- .github/ISSUE_TEMPLATE/bug_report.yml | 37 +++++++++ .github/ISSUE_TEMPLATE/config.yml | 4 + .github/ISSUE_TEMPLATE/feature_request.yml | 21 +++++ .github/workflows/quality_checks.yml | 82 +++++++++++++++++++ .vscode/settings.json | 5 ++ README.md | 75 ++++++++--------- wrapper_app_project/.scripts/config.mjs | 13 +++ wrapper_app_project/.scripts/util.mjs | 13 +++ .../template/README.md.handlebars | 16 ++++ .../android/app/build.gradle.handlebars | 14 ++++ .../org/getoutline/pwa/Config.kt.handlebars | 14 ++++ .../getoutline/pwa/MainActivity.kt.handlebars | 14 ++++ .../main/res/values/strings.xml.handlebars | 16 ++++ .../App.xcodeproj/project.pbxproj.handlebars | 13 +++ .../ios/App/App/Config.swift.handlebars | 14 ++++ .../ios/App/App/Info.plist.handlebars | 15 ++++ 16 files changed, 325 insertions(+), 41 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/workflows/quality_checks.yml create mode 100644 .vscode/settings.json diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..3b76de7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,37 @@ +name: Report Unexpected Behavior +type: Bug +description: File a bug report. +body: + - type: checkboxes + id: existing-issues-check + attributes: + label: "Confirm: Verified Existing Issues" + description: "Before proceeding, confirm you've searched for similar issues." + options: + - label: "I have searched the [existing issues](https://github.com/Jigsaw-Code/outline-app-maker/issues) and found no similar bug reports." + required: true + + - type: textarea + id: reproduction-steps + attributes: + label: "Steps to Reproduce" + description: "List the precise steps needed to reproduce the bug, starting from a fresh state where possible." + placeholder: | + 1. Go to '...' or run 'docker run ...' + 2. Perform '....' + 3. Observe '....' + + - type: textarea + id: expected-behavior + attributes: + label: "Expected Behavior" + description: "What did you expect to happen in this case?" + + - type: input + id: environment + attributes: + label: "Environment" + description: "Please specify your relevant system details: stuff like operating system, Docker version, and the commit you're using." + placeholder: "e.g., OS: Sequoia 16.7, etc." + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..89bb0f7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,4 @@ +contact_links: + - name: Reddit + url: https://www.reddit.com/r/outlinevpn/ + about: Ask questions and discuss with the community. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..fb71264 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,21 @@ +name: Feature Request +type: Feature +description: Request a new feature! +body: + - type: checkboxes + id: existing-features-check + attributes: + label: "Confirm: Verified Existing Feature Requests" + description: "Before proceeding, confirm you've searched for similar feature requests. If a similar request exists, please add your thoughts there instead of opening a new one." + options: + - label: "I have searched the [existing issues](https://github.com/Jigsaw-Code/outline-app-maker/issues) and found no similar feature requests." + required: true + + - type: textarea + id: feature-description + attributes: + label: "Feature Description" + description: "Please describe the feature in detail. What use case does it address, and why is the current system insufficient?" + placeholder: "e.g. I would like to be able to..." + validations: + required: true diff --git a/.github/workflows/quality_checks.yml b/.github/workflows/quality_checks.yml new file mode 100644 index 0000000..49fe0e3 --- /dev/null +++ b/.github/workflows/quality_checks.yml @@ -0,0 +1,82 @@ +name: Quality Checks + +on: + pull_request: + types: [opened,synchronize] + +permissions: + contents: read + +jobs: + build_android: + name: Build Android + runs-on: ubuntu-latest + + steps: + - name: Clone Repository + uses: actions/checkout@v4 + + - name: Install Node + uses: actions/setup-node@v3 + with: + node-version-file: .nvmrc + cache: npm + cache-dependency-path: ./package-lock.json + + - name: Install NPM Dependencies + run: npm ci + + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version-file: 'go.mod' + + - name: Build Android + run: npm run build -- --platform=android --entryUrl="https://www.example.com" + + build_ios: + name: Build iOS + runs-on: macos-latest + + steps: + - name: Clone Repository + uses: actions/checkout@v4 + + - name: Install Node + uses: actions/setup-node@v3 + with: + node-version-file: .nvmrc + cache: npm + cache-dependency-path: ./package-lock.json + + - name: Install NPM Dependencies + run: npm ci + + - name: Install Go + uses: actions/setup-go@v5 + with: + go-version-file: 'go.mod' + + - name: Build iOS + run: npm run build -- --platform=ios --entryUrl="https://www.example.com" + + licensing: + name: License Headers + runs-on: ubuntu-latest + + steps: + - name: Clone Repository + uses: actions/checkout@v4 + + - name: Check Files + run: | + REQUIRED_HEADER_SNIPPET="Copyright 2025 The Outline Authors" + MISSING_HEADER_FILES=$(find . \( -name "*.handlebars" -o -name "*.mjs" -o -name "*.html" -o -name "*.sh" \) -not -name "*.json.handlebars" -exec grep -L "${REQUIRED_HEADER_SNIPPET}" {} +) + + if [[ -n "$MISSING_HEADER_FILES" ]]; then + echo "Error: The following files are missing the required license header:" + echo "$MISSING_HEADER_FILES" + exit 1 + else + echo "All files have the required license header." + fi diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..84ea456 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "yaml.schemas": { + "https://www.schemastore.org/github-issue-config.json": "./.github/ISSUE_TEMPLATE/config.yml" + } +} diff --git a/README.md b/README.md index 52ddb1e..80c6639 100644 --- a/README.md +++ b/README.md @@ -8,31 +8,31 @@ To verify that your system has the necessary dependencies to generate your web w ./doctor ``` -## Building the app project for **iOS** +## Building the app project for **Android** -> [!WARNING] -> You can only build iOS apps on MacOS. -> Currently only works with build targets of iOS 17.2 (and below?) +> [!NOTE] +> If you want to build Android on Windows, please use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) * You will need the url you want to load initially in your app. -* You will need [go](https://golang.org/) to build the SDK library. * You will need [Node.js](https://nodejs.org/en/) for the project setup and web server. -* You will need [XCode](https://developer.apple.com/xcode/). -* You will need [cocoapods](https://cocoapods.org/). +* You will need [go](https://golang.org/) to build the SDK library. +* You will need [JDK 17](https://stackoverflow.com/a/70649641) to build the app. +* You will need [Android Studio](https://developer.android.com/studio/). + * Make sure to [install the NDK](https://developer.android.com/studio/projects/install-ndk#default-version). + * Make sure to [set the correct JDK](https://stackoverflow.com/a/30631386). -[Please refer to CapacitorJS's environment setup guide](https://capacitorjs.com/docs/getting-started/environment-setup#ios-requirements) and run `./doctor` to check to see if you have all the required dependencies. +[Please refer to CapacitorJS's environment setup guide](https://capacitorjs.com/docs/getting-started/environment-setup#android-requirements) and run `./doctor` to check to see if you have all the required dependencies. ```sh npm run reset -npm run build:project -- --platform=ios --entryUrl="https://www.example.com" -npm run open:ios +npm run build -- --platform=android --entryUrl="https://www.example.com" ``` -Click the "play" button in XCode to start your iOS app! +Wait for Gradle to load your project. Click the "play" button in Android Studio to start your Android app! [See below for the list of available configuration options.](#available-configuration-options) -### Adding icon and splash screen assets to your generated iOS project +### Adding icon and splash screen assets to your generated Android project > [!NOTE] > TODO: automate this process @@ -43,42 +43,41 @@ You'll need to add the following images to the `assets` folder in your generated - A 2732x2732 png titled `splash.png` containing your splash screen. - Another 2732x2732 png titled `splash-dark.png` containing your splash screen in dark mode. -Then, run the following command to generate and place the assets in the appropriate places in your iOS project: +Then, run the following command to generate and place the assets in the appropriate places in your Android project: ```sh -npx capacitor-assets generate --ios +npx capacitor-assets generate --android ``` -### Publishing your app in the App Store +### Publishing your app in the Google Play Store -[Follow these instructions on how to publish your app for beta testing and the App Store.](https://developer.apple.com/documentation/xcode/distributing-your-app-for-beta-testing-and-releases) +[Follow these instructions to learn how to publish your app to the Google Play Store](https://developer.android.com/studio/publish) -## Building the app project for **Android** -> [!WARNING] -> If you want to build Android on Windows, please use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) +## Building the app project for **iOS** + +> [!NOTE] +> You can only build iOS apps on MacOS. +> Currently only works with build targets of iOS 17.2 (and below?) * You will need the url you want to load initially in your app. -* You will need [Node.js](https://nodejs.org/en/) for the project setup and web server. * You will need [go](https://golang.org/) to build the SDK library. -* You will need [JDK 17](https://stackoverflow.com/a/70649641) to build the app. -* You will need [Android Studio](https://developer.android.com/studio/). - * Make sure to [install the NDK](https://developer.android.com/studio/projects/install-ndk#default-version). - * Make sure to [set the correct JDK](https://stackoverflow.com/a/30631386). +* You will need [Node.js](https://nodejs.org/en/) for the project setup and web server. +* You will need [XCode](https://developer.apple.com/xcode/). +* You will need [cocoapods](https://cocoapods.org/). -[Please refer to CapacitorJS's environment setup guide](https://capacitorjs.com/docs/getting-started/environment-setup#android-requirements) and run `./doctor` to check to see if you have all the required dependencies. +[Please refer to CapacitorJS's environment setup guide](https://capacitorjs.com/docs/getting-started/environment-setup#ios-requirements) and run `./doctor` to check to see if you have all the required dependencies. ```sh npm run reset -npm run build:project -- --platform=android --entryUrl="https://www.example.com" -npm run open:android +npm run build -- --platform=ios --entryUrl="https://www.example.com" ``` -Wait for Gradle to load your project. Click the "play" button in Android Studio to start your Android app! +Click the "play" button in XCode to start your iOS app! [See below for the list of available configuration options.](#available-configuration-options) -### Adding icon and splash screen assets to your generated Android project +### Adding icon and splash screen assets to your generated iOS project > [!NOTE] > TODO: automate this process @@ -89,17 +88,17 @@ You'll need to add the following images to the `assets` folder in your generated - A 2732x2732 png titled `splash.png` containing your splash screen. - Another 2732x2732 png titled `splash-dark.png` containing your splash screen in dark mode. -Then, run the following command to generate and place the assets in the appropriate places in your Android project: +Then, run the following command to generate and place the assets in the appropriate places in your iOS project: ```sh -npx capacitor-assets generate --android +npx capacitor-assets generate --ios ``` -### Publishing your app in the Google Play Store +### Publishing your app in the App Store -[Follow these instructions to learn how to publish your app to the Google Play Store](https://developer.android.com/studio/publish) +[Follow these instructions on how to publish your app for beta testing and the App Store.](https://developer.apple.com/documentation/xcode/distributing-your-app-for-beta-testing-and-releases) -## Available Configuration Options +## Available Configuration Options for `npm run build` | Option | Description | Possible Values | | ------------------- | ------------------------------------------------------------------------------- | ------------------------ | @@ -124,7 +123,7 @@ npm run start:navigator -- --entryUrl="https://www.example.com" \ Once the server has started, you can then run the build commands above in a separate terminal to view the demo in your app. -## Available Configuration Options +### Available Configuration Options for `npm run start:navigator` | Option | Description | Possible Values | | ------------------- | ------------------------------------------------------------------------------- | ------------------------ | @@ -142,9 +141,3 @@ When encountering an issue, the first thing you'll want to do is run the doctor ``` Additionally, you should run `npm run reset` to ensure your `output` and `node_modules` folders have not been tampered with! - -### Commonly occuring issues - -> [!NOTE] -> TODO: compile a list of commonly occuring issues. - diff --git a/wrapper_app_project/.scripts/config.mjs b/wrapper_app_project/.scripts/config.mjs index 4ed18e8..43811f4 100644 --- a/wrapper_app_project/.scripts/config.mjs +++ b/wrapper_app_project/.scripts/config.mjs @@ -1,3 +1,16 @@ +// Copyright 2025 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. import { promises as fs } from 'node:fs' import path from 'node:path' diff --git a/wrapper_app_project/.scripts/util.mjs b/wrapper_app_project/.scripts/util.mjs index f78af63..a61583b 100644 --- a/wrapper_app_project/.scripts/util.mjs +++ b/wrapper_app_project/.scripts/util.mjs @@ -1,3 +1,16 @@ +// Copyright 2025 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. import fs from 'node:fs' import archiver from 'archiver' diff --git a/wrapper_app_project/template/README.md.handlebars b/wrapper_app_project/template/README.md.handlebars index 0582741..1a02d81 100644 --- a/wrapper_app_project/template/README.md.handlebars +++ b/wrapper_app_project/template/README.md.handlebars @@ -1,3 +1,19 @@ + + # My Outline Project ## Starting the project diff --git a/wrapper_app_project/template/android/app/build.gradle.handlebars b/wrapper_app_project/template/android/app/build.gradle.handlebars index a446565..21f7b1a 100644 --- a/wrapper_app_project/template/android/app/build.gradle.handlebars +++ b/wrapper_app_project/template/android/app/build.gradle.handlebars @@ -1,3 +1,17 @@ +// Copyright 2025 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + apply plugin: 'com.android.application' android { diff --git a/wrapper_app_project/template/android/app/src/main/java/org/getoutline/pwa/Config.kt.handlebars b/wrapper_app_project/template/android/app/src/main/java/org/getoutline/pwa/Config.kt.handlebars index 16f30e4..6a2c28a 100644 --- a/wrapper_app_project/template/android/app/src/main/java/org/getoutline/pwa/Config.kt.handlebars +++ b/wrapper_app_project/template/android/app/src/main/java/org/getoutline/pwa/Config.kt.handlebars @@ -1,3 +1,17 @@ +// Copyright 2025 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package {{appId}} object Config { diff --git a/wrapper_app_project/template/android/app/src/main/java/org/getoutline/pwa/MainActivity.kt.handlebars b/wrapper_app_project/template/android/app/src/main/java/org/getoutline/pwa/MainActivity.kt.handlebars index ac626aa..c474c22 100644 --- a/wrapper_app_project/template/android/app/src/main/java/org/getoutline/pwa/MainActivity.kt.handlebars +++ b/wrapper_app_project/template/android/app/src/main/java/org/getoutline/pwa/MainActivity.kt.handlebars @@ -1,3 +1,17 @@ +// Copyright 2025 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + package {{appId}} import android.os.Bundle diff --git a/wrapper_app_project/template/android/app/src/main/res/values/strings.xml.handlebars b/wrapper_app_project/template/android/app/src/main/res/values/strings.xml.handlebars index e5c4acf..25ee8b4 100644 --- a/wrapper_app_project/template/android/app/src/main/res/values/strings.xml.handlebars +++ b/wrapper_app_project/template/android/app/src/main/res/values/strings.xml.handlebars @@ -1,3 +1,19 @@ + + {{appName}} diff --git a/wrapper_app_project/template/ios/App/App.xcodeproj/project.pbxproj.handlebars b/wrapper_app_project/template/ios/App/App.xcodeproj/project.pbxproj.handlebars index 09c5964..009cc07 100644 --- a/wrapper_app_project/template/ios/App/App.xcodeproj/project.pbxproj.handlebars +++ b/wrapper_app_project/template/ios/App/App.xcodeproj/project.pbxproj.handlebars @@ -1,4 +1,17 @@ // !$*UTF8*$! +// Copyright 2025 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. { archiveVersion = 1; classes = { diff --git a/wrapper_app_project/template/ios/App/App/Config.swift.handlebars b/wrapper_app_project/template/ios/App/App/Config.swift.handlebars index 4c91f6d..0bc9253 100644 --- a/wrapper_app_project/template/ios/App/App/Config.swift.handlebars +++ b/wrapper_app_project/template/ios/App/App/Config.swift.handlebars @@ -1,3 +1,17 @@ +// Copyright 2025 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + import Foundation struct Config { diff --git a/wrapper_app_project/template/ios/App/App/Info.plist.handlebars b/wrapper_app_project/template/ios/App/App/Info.plist.handlebars index c4be23c..7dacbab 100644 --- a/wrapper_app_project/template/ios/App/App/Info.plist.handlebars +++ b/wrapper_app_project/template/ios/App/App/Info.plist.handlebars @@ -1,3 +1,18 @@ + From 13da1f259558b185f14334a29a3dd8d3e3caf85f Mon Sep 17 00:00:00 2001 From: Daniel LaCosse <3759828+daniellacosse@users.noreply.github.com> Date: Mon, 14 Jul 2025 16:56:41 -0400 Subject: [PATCH 2/8] Clarify that it's the _project_ we're buliding. --- .github/workflows/quality_checks.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/quality_checks.yml b/.github/workflows/quality_checks.yml index 49fe0e3..f7bae1e 100644 --- a/.github/workflows/quality_checks.yml +++ b/.github/workflows/quality_checks.yml @@ -8,8 +8,8 @@ permissions: contents: read jobs: - build_android: - name: Build Android + build_android_project: + name: Build Android Project runs-on: ubuntu-latest steps: @@ -34,8 +34,8 @@ jobs: - name: Build Android run: npm run build -- --platform=android --entryUrl="https://www.example.com" - build_ios: - name: Build iOS + build_ios_project: + name: Build iOS Project runs-on: macos-latest steps: From fa477502074c85a28860bd77dd9b1e11714a836a Mon Sep 17 00:00:00 2001 From: Daniel LaCosse <3759828+daniellacosse@users.noreply.github.com> Date: Wed, 16 Jul 2025 11:58:21 -0400 Subject: [PATCH 3/8] add CODEOWNERS --- .github/CODEOWNERS | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..e8f3d2c --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,3 @@ +# TODO: once graduated, remove and switch to double approval model + +* @daniellacosse \ No newline at end of file From 5f809f7c937148b6bd54993067ba2c220b27bd26 Mon Sep 17 00:00:00 2001 From: Daniel LaCosse <3759828+daniellacosse@users.noreply.github.com> Date: Wed, 16 Jul 2025 12:03:09 -0400 Subject: [PATCH 4/8] Remove "you will need" --- README.md | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 80c6639..8f90a14 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,14 @@ To verify that your system has the necessary dependencies to generate your web w > [!NOTE] > If you want to build Android on Windows, please use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) -* You will need the url you want to load initially in your app. -* You will need [Node.js](https://nodejs.org/en/) for the project setup and web server. -* You will need [go](https://golang.org/) to build the SDK library. -* You will need [JDK 17](https://stackoverflow.com/a/70649641) to build the app. -* You will need [Android Studio](https://developer.android.com/studio/). - * Make sure to [install the NDK](https://developer.android.com/studio/projects/install-ndk#default-version). - * Make sure to [set the correct JDK](https://stackoverflow.com/a/30631386). +* You will need: + * the url you want to load initially in your app. + * [Node.js](https://nodejs.org/en/) for the project setup and web server. + * [go](https://golang.org/) to build the SDK library. + * [JDK 17](https://stackoverflow.com/a/70649641) to build the app. + * [Android Studio](https://developer.android.com/studio/). + * Make sure to [install the NDK](https://developer.android.com/studio/projects/install-ndk#default-version). + * Make sure to [set the correct JDK](https://stackoverflow.com/a/30631386). [Please refer to CapacitorJS's environment setup guide](https://capacitorjs.com/docs/getting-started/environment-setup#android-requirements) and run `./doctor` to check to see if you have all the required dependencies. @@ -60,11 +61,12 @@ npx capacitor-assets generate --android > You can only build iOS apps on MacOS. > Currently only works with build targets of iOS 17.2 (and below?) -* You will need the url you want to load initially in your app. -* You will need [go](https://golang.org/) to build the SDK library. -* You will need [Node.js](https://nodejs.org/en/) for the project setup and web server. -* You will need [XCode](https://developer.apple.com/xcode/). -* You will need [cocoapods](https://cocoapods.org/). +* You will need: + * the url you want to load initially in your app. + * [go](https://golang.org/) to build the SDK library. + * [Node.js](https://nodejs.org/en/) for the project setup and web server. + * [XCode](https://developer.apple.com/xcode/). + * [cocoapods](https://cocoapods.org/). [Please refer to CapacitorJS's environment setup guide](https://capacitorjs.com/docs/getting-started/environment-setup#ios-requirements) and run `./doctor` to check to see if you have all the required dependencies. From 4bbfe27db55333f61df75db91db7a14bb45fe6c0 Mon Sep 17 00:00:00 2001 From: Daniel LaCosse <3759828+daniellacosse@users.noreply.github.com> Date: Thu, 17 Jul 2025 10:04:28 -0400 Subject: [PATCH 5/8] I didn't know grep supported regex? --- .github/workflows/quality_checks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/quality_checks.yml b/.github/workflows/quality_checks.yml index f7bae1e..abf9cea 100644 --- a/.github/workflows/quality_checks.yml +++ b/.github/workflows/quality_checks.yml @@ -70,7 +70,7 @@ jobs: - name: Check Files run: | - REQUIRED_HEADER_SNIPPET="Copyright 2025 The Outline Authors" + REQUIRED_HEADER_SNIPPET="Copyright 20[0-9][0-9] The Outline Authors" MISSING_HEADER_FILES=$(find . \( -name "*.handlebars" -o -name "*.mjs" -o -name "*.html" -o -name "*.sh" \) -not -name "*.json.handlebars" -exec grep -L "${REQUIRED_HEADER_SNIPPET}" {} +) if [[ -n "$MISSING_HEADER_FILES" ]]; then From 1a1fcd13f75995cde40fbfd1b65d26fa3a70dd05 Mon Sep 17 00:00:00 2001 From: Daniel LaCosse <3759828+daniellacosse@users.noreply.github.com> Date: Thu, 17 Jul 2025 10:13:22 -0400 Subject: [PATCH 6/8] Update README.md Co-authored-by: Vinicius Fortuna --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f90a14..6d4dab5 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ npx capacitor-assets generate --android > Currently only works with build targets of iOS 17.2 (and below?) * You will need: - * the url you want to load initially in your app. + * The url you want to load initially in your app. * [go](https://golang.org/) to build the SDK library. * [Node.js](https://nodejs.org/en/) for the project setup and web server. * [XCode](https://developer.apple.com/xcode/). From eeb9da278d638c0fade92c4687de8f2614b2019d Mon Sep 17 00:00:00 2001 From: Daniel LaCosse <3759828+daniellacosse@users.noreply.github.com> Date: Thu, 17 Jul 2025 11:05:57 -0400 Subject: [PATCH 7/8] Feedback --- .github/CODEOWNERS | 4 +--- .github/workflows/quality_checks.yml | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e8f3d2c..aed4370 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1 @@ -# TODO: once graduated, remove and switch to double approval model - -* @daniellacosse \ No newline at end of file +* @daniellacosse diff --git a/.github/workflows/quality_checks.yml b/.github/workflows/quality_checks.yml index abf9cea..ebd57fa 100644 --- a/.github/workflows/quality_checks.yml +++ b/.github/workflows/quality_checks.yml @@ -31,7 +31,7 @@ jobs: with: go-version-file: 'go.mod' - - name: Build Android + - name: Generate Android Project run: npm run build -- --platform=android --entryUrl="https://www.example.com" build_ios_project: @@ -57,7 +57,7 @@ jobs: with: go-version-file: 'go.mod' - - name: Build iOS + - name: Generate iOS Project run: npm run build -- --platform=ios --entryUrl="https://www.example.com" licensing: From 2e9268d6a9148a6e8e6ec417f9dfe333784a3cc1 Mon Sep 17 00:00:00 2001 From: Daniel LaCosse <3759828+daniellacosse@users.noreply.github.com> Date: Thu, 17 Jul 2025 11:10:18 -0400 Subject: [PATCH 8/8] remove md.handlebars check --- .github/workflows/quality_checks.yml | 2 +- .../template/README.md.handlebars | 16 ---------------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/.github/workflows/quality_checks.yml b/.github/workflows/quality_checks.yml index ebd57fa..17c828d 100644 --- a/.github/workflows/quality_checks.yml +++ b/.github/workflows/quality_checks.yml @@ -71,7 +71,7 @@ jobs: - name: Check Files run: | REQUIRED_HEADER_SNIPPET="Copyright 20[0-9][0-9] The Outline Authors" - MISSING_HEADER_FILES=$(find . \( -name "*.handlebars" -o -name "*.mjs" -o -name "*.html" -o -name "*.sh" \) -not -name "*.json.handlebars" -exec grep -L "${REQUIRED_HEADER_SNIPPET}" {} +) + MISSING_HEADER_FILES=$(find . \( -name "*.handlebars" -o -name "*.mjs" -o -name "*.html" -o -name "*.sh" \) -not -name "*.json.handlebars" -not -name "*.md.handlebars" -exec grep -L "${REQUIRED_HEADER_SNIPPET}" {} +) if [[ -n "$MISSING_HEADER_FILES" ]]; then echo "Error: The following files are missing the required license header:" diff --git a/wrapper_app_project/template/README.md.handlebars b/wrapper_app_project/template/README.md.handlebars index 1a02d81..0582741 100644 --- a/wrapper_app_project/template/README.md.handlebars +++ b/wrapper_app_project/template/README.md.handlebars @@ -1,19 +1,3 @@ - - # My Outline Project ## Starting the project