-
Notifications
You must be signed in to change notification settings - Fork 4.6k
🪟 🔧 Switch to pnpm
for package managing
#22053
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 26 commits
fd225c9
9b1d50b
35bf80e
0a164df
63001be
2dab133
ff69510
d361c06
07b0b0b
b3649dc
2d1698b
ca66b4c
3604bdc
99ef8d1
6d0b4e2
e08d8cf
cdf5328
31edfdc
09cb556
6c2ff39
352a21a
e851a1c
695cdb6
3791796
3bfc186
ab1d27f
8d2cc0a
a7dd7b9
9862222
d4feec3
f0e25f3
5db4ad5
bf1da86
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,7 +9,7 @@ module.exports = { | |
"plugin:jsx-a11y/recommended", | ||
"plugin:@airbyte/recommended", | ||
], | ||
plugins: ["react", "@typescript-eslint", "prettier", "unused-imports", "css-modules", "jsx-a11y", "@airbyte"], | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ℹ️ This is with |
||
plugins: ["@typescript-eslint", "prettier", "unused-imports", "css-modules", "jsx-a11y", "@airbyte"], | ||
parserOptions: { | ||
ecmaVersion: 2020, | ||
sourceType: "module", | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
engine-strict=true | ||
enable-pre-post-scripts=true | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ℹ️ Required for |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,31 +1,26 @@ | ||
# airbyte-webapp | ||
|
||
This module contains the Airbyte Webapp. It is a React app written in TypeScript. It runs in a Docker container. A very lightweight nginx server runs in that Docker container and serves the webapp. | ||
This module contains the Airbyte Webapp. It is a React app written in TypeScript. | ||
The webapp compiles to static HTML, JavaScript and CSS, which is served (in OSS) via | ||
a nginx in the airbyte-webapp docker image. This nginx also serves as the reverse proxy | ||
for accessing the server APIs in other images. | ||
|
||
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). | ||
## Building the webapp | ||
|
||
## Available Scripts | ||
You can build the webapp using Gradle in the root of the repository: | ||
|
||
In the project directory, you can run: | ||
```sh | ||
# Only compile and build the docker webapp image: | ||
SUB_BUILD=PLATFORM ./gradlew :airbyte-webapp:assemble | ||
# Build the webapp and additional artifacts and run tests: | ||
SUB_BUILD=PLATFORM ./gradlew :airbyte-webapp:build | ||
``` | ||
|
||
### `npm start` | ||
## Developing the webapp | ||
|
||
Runs the app in the development mode.<br /> | ||
Open [http://localhost:3000](http://localhost:3000) to view it in the browser. | ||
For an instruction how to develop on the webapp, please refer to our [documentation](https://docs.airbyte.com/contributing-to-airbyte/developing-locally/#develop-on-airbyte-webapp). | ||
|
||
### `npm test` | ||
### Entrypoints | ||
|
||
Launches the test runner in the interactive watch mode.<br /> | ||
|
||
### `npm run build` | ||
|
||
Builds the app for production to the `build` folder.<br /> | ||
|
||
### VERSION=yourtag ./gradlew :airbyte-webapp:assemble | ||
|
||
Builds the app and Docker image and tags the image with `yourtag`. | ||
Note: needs to be run from the root directory of the Airbyte project. | ||
|
||
## Entrypoints | ||
* `airbyte-webapp/src/App.tsx` is the entrypoint into the OSS version of the webapp. | ||
* `airbyte-webapp/src/packages/cloud/App.tsx` is the entrypoint into the Cloud version of the webapp. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,28 +1,49 @@ | ||
plugins { | ||
id "base" | ||
id "com.github.node-gradle.node" version "3.3.0" | ||
id "com.github.node-gradle.node" version "3.4.0" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ℹ️ Required to have |
||
} | ||
|
||
// Use the node version that's defined in the .nvmrc file | ||
def nodeVersion = new File("${projectDir}/.nvmrc").text.trim(); | ||
|
||
// Read pnpm version to use from package.json engines.pnpm entry | ||
def pnpmVer = new groovy.json.JsonSlurper().parse(new File("${projectDir}/package.json")).engines.pnpm.trim(); | ||
|
||
// This array should contain a path to all configs that are common to most build tasks and | ||
// might affect them (i.e. if any of those files change we want to rerun most tasks) | ||
def commonConfigs = [ | ||
'.env', | ||
'package.json', | ||
'package-lock.json', | ||
'pnpm-lock.yaml', | ||
'tsconfig.json', | ||
'.prettierrc.js' | ||
] | ||
|
||
node { | ||
download = true | ||
version = nodeVersion | ||
npmInstallCommand = 'ci' | ||
pnpmVersion = pnpmVer | ||
} | ||
|
||
task validateLockFiles { | ||
description "Validate only a pnpm-lock.yaml lock file exists" | ||
doLast { | ||
assert file("pnpm-lock.yaml").exists() | ||
assert !file("package-lock.json").exists() | ||
assert !file("yarn.lock").exists() | ||
} | ||
} | ||
|
||
npm_run_build { | ||
pnpmInstall.dependsOn validateLockFiles | ||
// Make sure `pnpmInstall` always runs, since it's better at determining | ||
// whether it's needs to do anything than Gradle can | ||
pnpmInstall.outputs.upToDateWhen { false } | ||
|
||
task pnpmBuild(type: PnpmTask) { | ||
dependsOn pnpmInstall | ||
|
||
args = ['build'] | ||
|
||
inputs.files commonConfigs | ||
inputs.file '.eslintrc.js' | ||
inputs.dir 'public' | ||
|
@@ -31,16 +52,16 @@ npm_run_build { | |
outputs.dir 'build/app' | ||
} | ||
|
||
task test(type: NpmTask) { | ||
task test(type: PnpmTask) { | ||
dependsOn assemble | ||
|
||
args = ['run', 'test:ci'] | ||
inputs.files commonConfigs | ||
inputs.dir 'src' | ||
} | ||
|
||
task licenseCheck(type: NpmTask) { | ||
dependsOn npmInstall | ||
task licenseCheck(type: PnpmTask) { | ||
dependsOn pnpmInstall | ||
|
||
args = ['run', 'license-check'] | ||
inputs.files commonConfigs | ||
|
@@ -51,8 +72,8 @@ task licenseCheck(type: NpmTask) { | |
outputs.upToDateWhen { true } | ||
} | ||
|
||
task validateLinks(type: NpmTask) { | ||
dependsOn npmInstall | ||
task validateLinks(type: PnpmTask) { | ||
dependsOn pnpmInstall | ||
|
||
args = ['run', 'validate-links'] | ||
|
||
|
@@ -61,8 +82,8 @@ task validateLinks(type: NpmTask) { | |
outputs.upToDateWhen { false } | ||
} | ||
|
||
task buildStorybook(type: NpmTask) { | ||
dependsOn npmInstall | ||
task buildStorybook(type: PnpmTask) { | ||
dependsOn pnpmInstall | ||
args = ['run', 'build:storybook'] | ||
|
||
inputs.files commonConfigs | ||
|
@@ -78,7 +99,7 @@ task buildStorybook(type: NpmTask) { | |
} | ||
|
||
task copyBuildOutput(type: Copy) { | ||
dependsOn copyDocker, npm_run_build | ||
dependsOn copyDocker, pnpmBuild | ||
|
||
from "${project.projectDir}/build/app" | ||
into 'build/docker/bin/build' | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ℹ️ We'll always need a
type: string
beside the single elementenum
, to make sure Orval can generate the actual type properly, and not render it asunknown
. cc @flash1293 @lmossman