Skip to content

🪟 🔧 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

Merged
merged 33 commits into from
Feb 6, 2023
Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
fd225c9
WIP
Jan 19, 2023
9b1d50b
Merge branch 'master' into tim/pnpm
Jan 24, 2023
35bf80e
WIP
Jan 24, 2023
0a164df
Merge branch 'master' into tim/pnpm
Jan 28, 2023
63001be
Adjust lockfile
Jan 28, 2023
2dab133
Fix issues
Jan 28, 2023
ff69510
Adjust github flows
Jan 28, 2023
d361c06
More fixes
Jan 28, 2023
07b0b0b
Adjust documentation
Jan 28, 2023
b3649dc
Remove unnecessary tsconfig entry
Jan 28, 2023
2d1698b
Merge branch 'master' into tim/pnpm
Jan 31, 2023
ca66b4c
Cleanup .eslintrc
Jan 31, 2023
3604bdc
Update dependencies
Jan 31, 2023
99ef8d1
Fix more issues
Jan 31, 2023
6d0b4e2
Correct TS
Jan 31, 2023
e08d8cf
Make pnpm install run always via gradle
Jan 31, 2023
cdf5328
Install @storybook/react explicitaly
Jan 31, 2023
31edfdc
Update snapshots due to new libraries
Jan 31, 2023
09cb556
Add node-fetch types
Jan 31, 2023
6c2ff39
Add `url` package
Jan 31, 2023
352a21a
Freeze react router version (due to useBlocker)
Jan 31, 2023
e851a1c
Merge branch 'master' into tim/pnpm
Feb 1, 2023
695cdb6
Fix typing issue
Feb 1, 2023
3791796
Update airbyte-webapp/src/components/ui/BarChart/BarChart.tsx
Feb 2, 2023
3bfc186
Rewrite README
Feb 2, 2023
ab1d27f
Merge branch 'master' into tim/pnpm
Feb 2, 2023
8d2cc0a
Update e2e test library
Feb 2, 2023
a7dd7b9
Remove retry
Feb 2, 2023
9862222
Latest pnpm version
Feb 2, 2023
d4feec3
Revert removal of retry logic
Feb 2, 2023
f0e25f3
Merge branch 'master' into tim/pnpm
Feb 2, 2023
5db4ad5
Merge branch 'master' into tim/pnpm
Feb 2, 2023
bf1da86
Merge branch 'master' into tim/pnpm
Feb 6, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/actions/cache-build-artifacts/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,15 @@ runs:
restore-keys: |
${{ inputs.cache-key }}-npm-${{ runner.os }}-

- name: pnpm Caching
uses: actions/cache@v3
with:
path: |
~/.pnpm-store
key: ${{ inputs.cache-key }}-pnpm-${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ inputs.cache-key }}-pnpm-${{ runner.os }}-

# this intentionally does not use restore-keys so we don't mess with gradle caching
- name: Gradle and Python Caching
uses: actions/cache@v3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ definitions:
- stream_slicers
properties:
type:
type: string
Copy link
Contributor Author

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 element enum, to make sure Orval can generate the actual type properly, and not render it as unknown. cc @flash1293 @lmossman

enum: [CartesianProductStreamSlicer]
stream_slicers:
type: array
Expand Down Expand Up @@ -746,6 +747,7 @@ definitions:
- type
properties:
type:
type: string
enum: [JsonFileSchemaLoader, JsonSchema] # TODO As part of Beta, remove JsonSchema and update connectors to use JsonFileSchemaLoader
file_path:
type: string
Expand Down
2 changes: 1 addition & 1 deletion airbyte-webapp/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -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"],
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ This is with pnpm now conflicting with the react plugin already being pulled in by eslint-config-react-app which we extend above. Since that plugin pulls in the react plugin also no need for us to pull it in explicitally.

plugins: ["@typescript-eslint", "prettier", "unused-imports", "css-modules", "jsx-a11y", "@airbyte"],
parserOptions: {
ecmaVersion: 2020,
sourceType: "module",
Expand Down
1 change: 1 addition & 0 deletions airbyte-webapp/.npmrc
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
engine-strict=true
enable-pre-post-scripts=true
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ Required for pnpm to execute the prestart etc scripts. It doesn't do so by default, but we're using the heavily for Orval compilation.

35 changes: 15 additions & 20 deletions airbyte-webapp/README.md
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.
45 changes: 33 additions & 12 deletions airbyte-webapp/build.gradle
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"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ Required to have PnpmTask available.

}

// 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'
Expand All @@ -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
Expand All @@ -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']

Expand All @@ -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
Expand All @@ -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'
Expand Down
Loading