Skip to content

Commit e5f8d7e

Browse files
committed
feat: add issue configuration and CI checks
1 parent 532a7f2 commit e5f8d7e

File tree

16 files changed

+325
-41
lines changed

16 files changed

+325
-41
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Report Unexpected Behavior
2+
type: Bug
3+
description: File a bug report.
4+
body:
5+
- type: checkboxes
6+
id: existing-issues-check
7+
attributes:
8+
label: "Confirm: Verified Existing Issues"
9+
description: "Before proceeding, confirm you've searched for similar issues."
10+
options:
11+
- label: "I have searched the [existing issues](https://github.com/Jigsaw-Code/outline-app-maker/issues) and found no similar bug reports."
12+
required: true
13+
14+
- type: textarea
15+
id: reproduction-steps
16+
attributes:
17+
label: "Steps to Reproduce"
18+
description: "List the precise steps needed to reproduce the bug, starting from a fresh state where possible."
19+
placeholder: |
20+
1. Go to '...' or run 'docker run ...'
21+
2. Perform '....'
22+
3. Observe '....'
23+
24+
- type: textarea
25+
id: expected-behavior
26+
attributes:
27+
label: "Expected Behavior"
28+
description: "What did you expect to happen in this case?"
29+
30+
- type: input
31+
id: environment
32+
attributes:
33+
label: "Environment"
34+
description: "Please specify your relevant system details: stuff like operating system, Docker version, and the commit you're using."
35+
placeholder: "e.g., OS: Sequoia 16.7, etc."
36+
validations:
37+
required: true

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
contact_links:
2+
- name: Reddit
3+
url: https://www.reddit.com/r/outlinevpn/
4+
about: Ask questions and discuss with the community.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: Feature Request
2+
type: Feature
3+
description: Request a new feature!
4+
body:
5+
- type: checkboxes
6+
id: existing-features-check
7+
attributes:
8+
label: "Confirm: Verified Existing Feature Requests"
9+
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."
10+
options:
11+
- label: "I have searched the [existing issues](https://github.com/Jigsaw-Code/outline-app-maker/issues) and found no similar feature requests."
12+
required: true
13+
14+
- type: textarea
15+
id: feature-description
16+
attributes:
17+
label: "Feature Description"
18+
description: "Please describe the feature in detail. What use case does it address, and why is the current system insufficient?"
19+
placeholder: "e.g. I would like to be able to..."
20+
validations:
21+
required: true
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
name: Quality Checks
2+
3+
on:
4+
pull_request:
5+
types: [opened,synchronize]
6+
7+
permissions:
8+
contents: read
9+
10+
jobs:
11+
build_android:
12+
name: Build Android
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Clone Repository
17+
uses: actions/checkout@v4
18+
19+
- name: Install Node
20+
uses: actions/setup-node@v3
21+
with:
22+
node-version-file: .nvmrc
23+
cache: npm
24+
cache-dependency-path: ./package-lock.json
25+
26+
- name: Install NPM Dependencies
27+
run: npm ci
28+
29+
- name: Install Go
30+
uses: actions/setup-go@v5
31+
with:
32+
go-version-file: 'go.mod'
33+
34+
- name: Build Android
35+
run: npm run build -- --platform=android --entryUrl="https://www.example.com"
36+
37+
build_ios:
38+
name: Build iOS
39+
runs-on: macos-latest
40+
41+
steps:
42+
- name: Clone Repository
43+
uses: actions/checkout@v4
44+
45+
- name: Install Node
46+
uses: actions/setup-node@v3
47+
with:
48+
node-version-file: .nvmrc
49+
cache: npm
50+
cache-dependency-path: ./package-lock.json
51+
52+
- name: Install NPM Dependencies
53+
run: npm ci
54+
55+
- name: Install Go
56+
uses: actions/setup-go@v5
57+
with:
58+
go-version-file: 'go.mod'
59+
60+
- name: Build iOS
61+
run: npm run build -- --platform=ios --entryUrl="https://www.example.com"
62+
63+
licensing:
64+
name: License Headers
65+
runs-on: ubuntu-latest
66+
67+
steps:
68+
- name: Clone Repository
69+
uses: actions/checkout@v4
70+
71+
- name: Check Files
72+
run: |
73+
REQUIRED_HEADER_SNIPPET="Copyright 2025 The Outline Authors"
74+
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}" {} +)
75+
76+
if [[ -n "$MISSING_HEADER_FILES" ]]; then
77+
echo "Error: The following files are missing the required license header:"
78+
echo "$MISSING_HEADER_FILES"
79+
exit 1
80+
else
81+
echo "All files have the required license header."
82+
fi

.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"yaml.schemas": {
3+
"https://www.schemastore.org/github-issue-config.json": "./.github/ISSUE_TEMPLATE/config.yml"
4+
}
5+
}

README.md

Lines changed: 34 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,31 @@ To verify that your system has the necessary dependencies to generate your web w
88
./doctor
99
```
1010

11-
## Building the app project for **iOS**
11+
## Building the app project for **Android**
1212

13-
> [!WARNING]
14-
> You can only build iOS apps on MacOS.
15-
> Currently only works with build targets of iOS 17.2 (and below?)
13+
> [!NOTE]
14+
> If you want to build Android on Windows, please use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install)
1615
1716
* You will need the url you want to load initially in your app.
18-
* You will need [go](https://golang.org/) to build the SDK library.
1917
* You will need [Node.js](https://nodejs.org/en/) for the project setup and web server.
20-
* You will need [XCode](https://developer.apple.com/xcode/).
21-
* You will need [cocoapods](https://cocoapods.org/).
18+
* You will need [go](https://golang.org/) to build the SDK library.
19+
* You will need [JDK 17](https://stackoverflow.com/a/70649641) to build the app.
20+
* You will need [Android Studio](https://developer.android.com/studio/).
21+
* Make sure to [install the NDK](https://developer.android.com/studio/projects/install-ndk#default-version).
22+
* Make sure to [set the correct JDK](https://stackoverflow.com/a/30631386).
2223

23-
[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.
24+
[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.
2425

2526
```sh
2627
npm run reset
27-
npm run build:project -- --platform=ios --entryUrl="https://www.example.com"
28-
npm run open:ios
28+
npm run build -- --platform=android --entryUrl="https://www.example.com"
2929
```
3030

31-
Click the "play" button in XCode to start your iOS app!
31+
Wait for Gradle to load your project. Click the "play" button in Android Studio to start your Android app!
3232

3333
[See below for the list of available configuration options.](#available-configuration-options)
3434

35-
### Adding icon and splash screen assets to your generated iOS project
35+
### Adding icon and splash screen assets to your generated Android project
3636

3737
> [!NOTE]
3838
> TODO: automate this process
@@ -43,42 +43,41 @@ You'll need to add the following images to the `assets` folder in your generated
4343
- A 2732x2732 png titled `splash.png` containing your splash screen.
4444
- Another 2732x2732 png titled `splash-dark.png` containing your splash screen in dark mode.
4545

46-
Then, run the following command to generate and place the assets in the appropriate places in your iOS project:
46+
Then, run the following command to generate and place the assets in the appropriate places in your Android project:
4747

4848
```sh
49-
npx capacitor-assets generate --ios
49+
npx capacitor-assets generate --android
5050
```
5151

52-
### Publishing your app in the App Store
52+
### Publishing your app in the Google Play Store
5353

54-
[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)
54+
[Follow these instructions to learn how to publish your app to the Google Play Store](https://developer.android.com/studio/publish)
5555

56-
## Building the app project for **Android**
5756

58-
> [!WARNING]
59-
> If you want to build Android on Windows, please use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install)
57+
## Building the app project for **iOS**
58+
59+
> [!NOTE]
60+
> You can only build iOS apps on MacOS.
61+
> Currently only works with build targets of iOS 17.2 (and below?)
6062
6163
* You will need the url you want to load initially in your app.
62-
* You will need [Node.js](https://nodejs.org/en/) for the project setup and web server.
6364
* You will need [go](https://golang.org/) to build the SDK library.
64-
* You will need [JDK 17](https://stackoverflow.com/a/70649641) to build the app.
65-
* You will need [Android Studio](https://developer.android.com/studio/).
66-
* Make sure to [install the NDK](https://developer.android.com/studio/projects/install-ndk#default-version).
67-
* Make sure to [set the correct JDK](https://stackoverflow.com/a/30631386).
65+
* You will need [Node.js](https://nodejs.org/en/) for the project setup and web server.
66+
* You will need [XCode](https://developer.apple.com/xcode/).
67+
* You will need [cocoapods](https://cocoapods.org/).
6868

69-
[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.
69+
[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.
7070

7171
```sh
7272
npm run reset
73-
npm run build:project -- --platform=android --entryUrl="https://www.example.com"
74-
npm run open:android
73+
npm run build -- --platform=ios --entryUrl="https://www.example.com"
7574
```
7675

77-
Wait for Gradle to load your project. Click the "play" button in Android Studio to start your Android app!
76+
Click the "play" button in XCode to start your iOS app!
7877

7978
[See below for the list of available configuration options.](#available-configuration-options)
8079

81-
### Adding icon and splash screen assets to your generated Android project
80+
### Adding icon and splash screen assets to your generated iOS project
8281

8382
> [!NOTE]
8483
> TODO: automate this process
@@ -89,17 +88,17 @@ You'll need to add the following images to the `assets` folder in your generated
8988
- A 2732x2732 png titled `splash.png` containing your splash screen.
9089
- Another 2732x2732 png titled `splash-dark.png` containing your splash screen in dark mode.
9190

92-
Then, run the following command to generate and place the assets in the appropriate places in your Android project:
91+
Then, run the following command to generate and place the assets in the appropriate places in your iOS project:
9392

9493
```sh
95-
npx capacitor-assets generate --android
94+
npx capacitor-assets generate --ios
9695
```
9796

98-
### Publishing your app in the Google Play Store
97+
### Publishing your app in the App Store
9998

100-
[Follow these instructions to learn how to publish your app to the Google Play Store](https://developer.android.com/studio/publish)
99+
[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)
101100

102-
## Available Configuration Options
101+
## Available Configuration Options for `npm run build`
103102

104103
| Option | Description | Possible Values |
105104
| ------------------- | ------------------------------------------------------------------------------- | ------------------------ |
@@ -124,7 +123,7 @@ npm run start:navigator -- --entryUrl="https://www.example.com" \
124123

125124
Once the server has started, you can then run the build commands above in a separate terminal to view the demo in your app.
126125

127-
## Available Configuration Options
126+
### Available Configuration Options for `npm run start:navigator`
128127

129128
| Option | Description | Possible Values |
130129
| ------------------- | ------------------------------------------------------------------------------- | ------------------------ |
@@ -142,9 +141,3 @@ When encountering an issue, the first thing you'll want to do is run the doctor
142141
```
143142

144143
Additionally, you should run `npm run reset` to ensure your `output` and `node_modules` folders have not been tampered with!
145-
146-
### Commonly occuring issues
147-
148-
> [!NOTE]
149-
> TODO: compile a list of commonly occuring issues.
150-

wrapper_app_project/.scripts/config.mjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
// Copyright 2025 The Outline Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// https://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
114
import { promises as fs } from 'node:fs'
215
import path from 'node:path'
316

wrapper_app_project/.scripts/util.mjs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
// Copyright 2025 The Outline Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// https://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
114
import fs from 'node:fs'
215

316
import archiver from 'archiver'

wrapper_app_project/template/README.md.handlebars

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
<!--
2+
Copyright 2025 The Outline Authors
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
https://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
-->
16+
117
# My Outline Project
218

319
## Starting the project

wrapper_app_project/template/android/app/build.gradle.handlebars

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
// Copyright 2025 The Outline Authors
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// https://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
115
apply plugin: 'com.android.application'
216

317
android {

0 commit comments

Comments
 (0)