Skip to content
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

fix: resolve plugins from npm packages correctly #1749

Merged
merged 11 commits into from
Oct 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions .changeset/strange-starfishes-press.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@redocly/openapi-core": patch
"@redocly/cli": patch
---

Fixed an issue where the plugins in external NPM packages could not be resolved if the CLI package was installed globally.
92 changes: 92 additions & 0 deletions .github/workflows/smoke-plugins.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: Plugins smoke tests

on:
pull_request:
types: [opened, synchronize, reopened]

env:
CI: true
REDOCLY_TELEMETRY: off

jobs:
prepare-smoke-plugins:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Prepare Smoke
run: bash ./scripts/prepare-smoke-plugins.sh
- uses: actions/cache@v3
with:
path: __tests__/smoke-plugins/
key: cache-plugins-${{ github.run_id }}-${{ github.run_attempt }}

run-smoke-plugins--npm--node-22:
needs: prepare-smoke-plugins
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v3
with:
path: __tests__/smoke-plugins/
key: cache-plugins-${{ github.run_id }}-${{ github.run_attempt }}
- uses: actions/setup-node@v3
with:
node-version: 22
- run: bash ./__tests__/smoke-plugins/run-smoke.sh

run-smoke-plugins--npm--node-20:
needs: prepare-smoke-plugins
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v3
with:
path: __tests__/smoke-plugins/
key: cache-plugins-${{ github.run_id }}-${{ github.run_attempt }}
- uses: actions/setup-node@v3
with:
node-version: 20
- run: bash ./__tests__/smoke-plugins/run-smoke.sh

run-smoke-plugins--npm--node-18:
needs: prepare-smoke-plugins
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v3
with:
path: __tests__/smoke-plugins/
key: cache-plugins-${{ github.run_id }}-${{ github.run_attempt }}
- uses: actions/setup-node@v3
with:
node-version: 18
- run: bash ./__tests__/smoke-plugins/run-smoke.sh

run-smoke-plugins--npm--node-16:
needs: prepare-smoke-plugins
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v3
with:
path: __tests__/smoke-plugins/
key: cache-plugins-${{ github.run_id }}-${{ github.run_attempt }}
- uses: actions/setup-node@v3
with:
node-version: 16
- run: bash ./__tests__/smoke-plugins/run-smoke.sh

run-smoke-plugins--npm--node-14:
needs: prepare-smoke-plugins
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v3
with:
path: __tests__/smoke-plugins/
key: cache-plugins-${{ github.run_id }}-${{ github.run_attempt }}
- uses: actions/setup-node@v3
with:
node-version: 14
- run: bash ./__tests__/smoke-plugins/run-smoke.sh
52 changes: 52 additions & 0 deletions .github/workflows/smoke.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,32 @@ jobs:
path: __tests__/smoke/
key: cache-${{ github.run_id }}-${{ github.run_attempt }}

run-smoke--npm--node-22:
needs: prepare-smoke
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v3
with:
path: __tests__/smoke/
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- uses: actions/setup-node@v3
with:
node-version: 22
- run: bash ./__tests__/smoke/run-smoke.sh "npm i redocly-cli.tgz" "npm run"

run-smoke--npm--node-22--redoc:
needs: prepare-smoke
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v3
with:
path: __tests__/smoke/
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- uses: actions/setup-node@v3
with:
node-version: 22
- run: bash ./__tests__/smoke/run-smoke.sh "npm i redoc redocly-cli.tgz" "npm run"

run-smoke--npm--node-20:
needs: prepare-smoke
runs-on: ubuntu-latest
Expand Down Expand Up @@ -130,6 +156,32 @@ jobs:
node-version: 14
- run: bash ./__tests__/smoke/run-smoke.sh "npm i redoc redocly-cli.tgz" "npm run"

run-smoke--yarn--node-22:
needs: prepare-smoke
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v3
with:
path: __tests__/smoke/
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- uses: actions/setup-node@v3
with:
node-version: 22
- run: bash ./__tests__/smoke/run-smoke.sh "yarn add ./redocly-cli.tgz" "yarn"

run-smoke--yarn--node-22--redoc:
needs: prepare-smoke
runs-on: ubuntu-latest
steps:
- uses: actions/cache@v3
with:
path: __tests__/smoke/
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
- uses: actions/setup-node@v3
with:
node-version: 22
- run: bash ./__tests__/smoke/run-smoke.sh "yarn add redoc ./redocly-cli.tgz" "yarn"

run-smoke--yarn--node-20:
needs: prepare-smoke
runs-on: ubuntu-latest
Expand Down
3 changes: 3 additions & 0 deletions __tests__/smoke-plugins/local-plugin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module.exports = function localPlugin() {
return { id: 'local-plugin' };
};
4 changes: 4 additions & 0 deletions __tests__/smoke-plugins/message-schema.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
type: object
properties:
message:
type: string
19 changes: 19 additions & 0 deletions __tests__/smoke-plugins/openapi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
openapi: 3.1.0
servers:
- url: http://redocly-example.com
info:
title: Sample API
version: 1.0.0
paths:
/hello:
get:
operationId: getMessage
security: []
summary: Get a greeting message
responses:
200:
description: OK
content:
application/json:
schema:
$ref: ./message-schema.yaml
10 changes: 10 additions & 0 deletions __tests__/smoke-plugins/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"name": "test-project-smoke-plugins",
"scripts": {
"redocly-version": "redocly --version",
"redocly-lint": "redocly lint openapi.yaml"
},
"dependencies": {
"@redocly/portal-plugin-async-api": "1.0.273"
}
}
5 changes: 5 additions & 0 deletions __tests__/smoke-plugins/redocly.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
extends:
- recommended
plugins:
- '@redocly/portal-plugin-async-api'
- local-plugin.js
19 changes: 19 additions & 0 deletions __tests__/smoke-plugins/run-smoke.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/bin/bash

set -eo pipefail # Fail on script errors

cd __tests__/smoke-plugins
echo
echo "Directory content:"
ls -a
echo

# Install plugin package
npm i

# Install CLI globally
npm i redocly-cli.tgz -g
tatomyr marked this conversation as resolved.
Show resolved Hide resolved

# Actual smoke test - executing the command provided as the second argument
npm run redocly-version
npm run redocly-lint
2 changes: 1 addition & 1 deletion packages/core/src/config/config-resolvers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ export async function resolvePlugins(
const absolutePluginPath = existsSync(maybeAbsolutePluginPath)
? maybeAbsolutePluginPath
: // For plugins imported from packages specifically
require.resolve(plugin);
require.resolve(plugin, { paths: [configDir] });
volodymyr-rutskyi marked this conversation as resolved.
Show resolved Hide resolved

if (!pluginsCache.has(absolutePluginPath)) {
let requiredPlugin: ImportedPlugin | undefined;
Expand Down
16 changes: 16 additions & 0 deletions scripts/prepare-smoke-plugins.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash

# For npm (Mutates packages/cli/package.json)
npm run pack:prepare

cp ./redocly-cli.tgz ./openapi-core.tgz ./__tests__/smoke-plugins

echo "Current directory:"
pwd
echo
echo "Current directory content:"
ls -a
echo
echo "Target directory content:"
ls -a __tests__/smoke-plugins/
echo
Loading