Commit c93dc66f authored by Andrew Fontaine's avatar Andrew Fontaine

Merge branch '297252-ci-editor-load-schema-url-fix' into 'master'

Force CI schema URL to be absolute

See merge request gitlab-org/gitlab!51479
parents 428ba0dc bb53f55d
...@@ -17,15 +17,21 @@ export class CiSchemaExtension extends EditorLiteExtension { ...@@ -17,15 +17,21 @@ export class CiSchemaExtension extends EditorLiteExtension {
* @param {String?} opts.ref - Current ref. Defaults to master * @param {String?} opts.ref - Current ref. Defaults to master
*/ */
registerCiSchema({ projectNamespace, projectPath, ref = 'master' } = {}) { registerCiSchema({ projectNamespace, projectPath, ref = 'master' } = {}) {
const ciSchemaUri = Api.buildUrl(Api.projectFileSchemaPath) const ciSchemaPath = Api.buildUrl(Api.projectFileSchemaPath)
.replace(':namespace_path', projectNamespace) .replace(':namespace_path', projectNamespace)
.replace(':project_path', projectPath) .replace(':project_path', projectPath)
.replace(':ref', ref) .replace(':ref', ref)
.replace(':filename', EXTENSION_CI_SCHEMA_FILE_NAME_MATCH); .replace(':filename', EXTENSION_CI_SCHEMA_FILE_NAME_MATCH);
// In order for workers loaded from `data://` as the
// ones loaded by monaco editor, we use absolute URLs
// to fetch schema files, hence the `gon.gitlab_url`
// reference. This prevents error:
// "Failed to execute 'fetch' on 'WorkerGlobalScope'"
const absoluteSchemaUrl = gon.gitlab_url + ciSchemaPath;
const modelFileName = this.getModel().uri.path.split('/').pop(); const modelFileName = this.getModel().uri.path.split('/').pop();
registerSchema({ registerSchema({
uri: ciSchemaUri, uri: absoluteSchemaUrl,
fileMatch: [modelFileName], fileMatch: [modelFileName],
}); });
} }
......
import { languages } from 'monaco-editor'; import { languages } from 'monaco-editor';
import { TEST_HOST } from 'helpers/test_constants';
import EditorLite from '~/editor/editor_lite'; import EditorLite from '~/editor/editor_lite';
import { CiSchemaExtension } from '~/editor/extensions/editor_ci_schema_ext'; import { CiSchemaExtension } from '~/editor/extensions/editor_ci_schema_ext';
import { EXTENSION_CI_SCHEMA_FILE_NAME_MATCH } from '~/editor/constants'; import { EXTENSION_CI_SCHEMA_FILE_NAME_MATCH } from '~/editor/constants';
...@@ -9,6 +10,7 @@ describe('~/editor/editor_ci_config_ext', () => { ...@@ -9,6 +10,7 @@ describe('~/editor/editor_ci_config_ext', () => {
let editor; let editor;
let instance; let instance;
let editorEl; let editorEl;
let originalGitlabUrl;
const createMockEditor = ({ blobPath = defaultBlobPath } = {}) => { const createMockEditor = ({ blobPath = defaultBlobPath } = {}) => {
setFixtures('<div id="editor"></div>'); setFixtures('<div id="editor"></div>');
...@@ -22,6 +24,15 @@ describe('~/editor/editor_ci_config_ext', () => { ...@@ -22,6 +24,15 @@ describe('~/editor/editor_ci_config_ext', () => {
instance.use(new CiSchemaExtension()); instance.use(new CiSchemaExtension());
}; };
beforeAll(() => {
originalGitlabUrl = gon.gitlab_url;
gon.gitlab_url = TEST_HOST;
});
afterAll(() => {
gon.gitlab_url = originalGitlabUrl;
});
beforeEach(() => { beforeEach(() => {
createMockEditor(); createMockEditor();
}); });
...@@ -73,7 +84,7 @@ describe('~/editor/editor_ci_config_ext', () => { ...@@ -73,7 +84,7 @@ describe('~/editor/editor_ci_config_ext', () => {
}); });
expect(getConfiguredYmlSchema()).toEqual({ expect(getConfiguredYmlSchema()).toEqual({
uri: `/${mockProjectNamespace}/${mockProjectPath}/-/schema/${mockRef}/${EXTENSION_CI_SCHEMA_FILE_NAME_MATCH}`, uri: `${TEST_HOST}/${mockProjectNamespace}/${mockProjectPath}/-/schema/${mockRef}/${EXTENSION_CI_SCHEMA_FILE_NAME_MATCH}`,
fileMatch: [defaultBlobPath], fileMatch: [defaultBlobPath],
}); });
}); });
...@@ -87,7 +98,7 @@ describe('~/editor/editor_ci_config_ext', () => { ...@@ -87,7 +98,7 @@ describe('~/editor/editor_ci_config_ext', () => {
}); });
expect(getConfiguredYmlSchema()).toEqual({ expect(getConfiguredYmlSchema()).toEqual({
uri: `/${mockProjectNamespace}/${mockProjectPath}/-/schema/master/${EXTENSION_CI_SCHEMA_FILE_NAME_MATCH}`, uri: `${TEST_HOST}/${mockProjectNamespace}/${mockProjectPath}/-/schema/master/${EXTENSION_CI_SCHEMA_FILE_NAME_MATCH}`,
fileMatch: ['another-ci-filename.yml'], fileMatch: ['another-ci-filename.yml'],
}); });
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment