diff --git a/lib/constants/data-binary-source.ts b/lib/constants/data-binary-source.ts index 02ca6814958c8c3d5f44b53d26dbff6d33bed8c0..e39af12ef0acf950c8e88eabe54bb021655511ec 100644 --- a/lib/constants/data-binary-source.ts +++ b/lib/constants/data-binary-source.ts @@ -21,6 +21,7 @@ export const DATASOURCE_PACKAGIST = 'packagist'; export const DATASOURCE_PYPI = 'pypi'; export const DATASOURCE_RUBYGEMS = 'rubygems'; export const DATASOURCE_RUBY_VERSION = 'ruby-version'; -export const DATASOURCE_SBT = 'sbt'; +export const DATASOURCE_SBT_PACKAGE = 'sbt-package'; +export const DATASOURCE_SBT_PLUGIN = 'sbt-plugin'; export const DATASOURCE_TERRAFORM = 'terraform'; export const DATASOURCE_TERRAFORM_PROVIDER = 'terraform-provider'; diff --git a/lib/datasource/common.ts b/lib/datasource/common.ts index 1fbea4e798b22f404699673843337400e490b8bc..a7eea21274b972fa32d7cc3c300325f2d36ff143 100644 --- a/lib/datasource/common.ts +++ b/lib/datasource/common.ts @@ -4,9 +4,7 @@ export interface GetReleasesConfig { lookupName: string; registryUrls?: string[]; compatibility?: Record<string, string>; - depType?: string; npmrc?: string; - versioning?: string; } export interface Config { @@ -17,7 +15,6 @@ export interface Config { } export interface PkgReleaseConfig extends Config { compatibility?: Record<string, string>; - depType?: string; npmrc?: string; versioning?: string; } diff --git a/lib/datasource/sbt/__fixtures__/maven-index.html b/lib/datasource/sbt-package/__fixtures__/maven-index.html similarity index 100% rename from lib/datasource/sbt/__fixtures__/maven-index.html rename to lib/datasource/sbt-package/__fixtures__/maven-index.html diff --git a/lib/datasource/sbt/__fixtures__/sbt-plugins-index.html b/lib/datasource/sbt-package/__fixtures__/sbt-plugins-index.html similarity index 100% rename from lib/datasource/sbt/__fixtures__/sbt-plugins-index.html rename to lib/datasource/sbt-package/__fixtures__/sbt-plugins-index.html diff --git a/lib/datasource/sbt/__snapshots__/index.spec.ts.snap b/lib/datasource/sbt-package/__snapshots__/index.spec.ts.snap similarity index 100% rename from lib/datasource/sbt/__snapshots__/index.spec.ts.snap rename to lib/datasource/sbt-package/__snapshots__/index.spec.ts.snap diff --git a/lib/datasource/sbt-package/index.spec.ts b/lib/datasource/sbt-package/index.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..447fd4b597e7018c59fe9dbf72e63f21597f0d2b --- /dev/null +++ b/lib/datasource/sbt-package/index.spec.ts @@ -0,0 +1,138 @@ +import path from 'path'; +import fs from 'fs'; +import nock from 'nock'; +import { getPkgReleases } from '.'; +import { DEFAULT_MAVEN_REPO } from '../../manager/maven/extract'; +import { parseIndexDir, SBT_PLUGINS_REPO } from '../sbt-plugin/util'; + +const mavenIndexHtml = fs.readFileSync( + path.resolve(__dirname, `./__fixtures__/maven-index.html`), + 'utf8' +); + +const sbtPluginIndex = fs.readFileSync( + path.resolve(__dirname, `./__fixtures__/sbt-plugins-index.html`), + 'utf8' +); + +describe('datasource/sbt', () => { + it('parses Maven index directory', () => { + expect(parseIndexDir(mavenIndexHtml)).toMatchSnapshot(); + }); + it('parses sbt index directory', () => { + expect(parseIndexDir(sbtPluginIndex)).toMatchSnapshot(); + }); + + describe('getPkgReleases', () => { + beforeEach(() => { + nock.disableNetConnect(); + nock('https://failed_repo') + .get('/maven/org/scalatest/') + .reply(404, null); + nock('https://repo.maven.apache.org') + .get('/maven2/org/scalatest/') + .reply( + 200, + '<a href="scalatest/" title=\'scalatest/\'>scalatest_2.12/</a>\n' + + '<a href="scalatest_2.12/" title=\'scalatest_2.12/\'>scalatest_2.12/</a>\n' + + "<a href='scalatest_sjs2.12/'>scalatest_2.12/</a>" + + "<a href='scalatest_native2.12/'>scalatest_2.12/</a>" + ); + nock('https://repo.maven.apache.org') + .get('/maven2/org/scalatest/scalatest/') + .reply(200, "<a href='1.2.0/'>1.2.0/</a>"); + nock('https://repo.maven.apache.org') + .get('/maven2/org/scalatest/scalatest_2.12/') + .reply(200, "<a href='1.2.3/'>4.5.6/</a>"); + + nock('https://dl.bintray.com') + .get('/sbt/sbt-plugin-releases/com.github.gseitz/') + .reply(200, ''); + nock('https://dl.bintray.com') + .get('/sbt/sbt-plugin-releases/org.foundweekends/sbt-bintray/') + .reply( + 200, + '<html>\n' + + '<head>\n' + + '</head>\n' + + '<body>\n' + + '<pre><a href="scala_2.12/">scala_2.12/</a></pre>\n' + + '</body>\n' + + '</html>' + ); + nock('https://dl.bintray.com') + .get( + '/sbt/sbt-plugin-releases/org.foundweekends/sbt-bintray/scala_2.12/' + ) + .reply( + 200, + '\n' + + '<html>\n' + + '<head>\n' + + '</head>\n' + + '<body>\n' + + '<pre><a href="sbt_1.0/">sbt_1.0/</a></pre>\n' + + '</body>\n' + + '</html>\n' + ); + nock('https://dl.bintray.com') + .get( + '/sbt/sbt-plugin-releases/org.foundweekends/sbt-bintray/scala_2.12/sbt_1.0/' + ) + .reply( + 200, + '\n' + + '<html>\n' + + '<head>\n' + + '</head>\n' + + '<body>\n' + + '<pre><a href="0.5.5/">0.5.5/</a></pre>\n' + + '</body>\n' + + '</html>\n' + ); + }); + + afterEach(() => { + nock.enableNetConnect(); + }); + + it('returns null in case of errors', async () => { + expect( + await getPkgReleases({ + lookupName: 'org.scalatest:scalatest', + registryUrls: ['https://failed_repo/maven'], + }) + ).toEqual(null); + }); + it('fetches releases from Maven', async () => { + expect( + await getPkgReleases({ + lookupName: 'org.scalatest:scalatest', + registryUrls: [ + 'https://failed_repo/maven', + DEFAULT_MAVEN_REPO, + SBT_PLUGINS_REPO, + ], + }) + ).toEqual({ + dependencyUrl: 'https://repo.maven.apache.org/maven2/org/scalatest', + display: 'org.scalatest:scalatest', + group: 'org.scalatest', + name: 'scalatest', + releases: [{ version: '1.2.0' }, { version: '1.2.3' }], + }); + expect( + await getPkgReleases({ + lookupName: 'org.scalatest:scalatest_2.12', + registryUrls: [DEFAULT_MAVEN_REPO, SBT_PLUGINS_REPO], + }) + ).toEqual({ + dependencyUrl: 'https://repo.maven.apache.org/maven2/org/scalatest', + display: 'org.scalatest:scalatest_2.12', + group: 'org.scalatest', + name: 'scalatest_2.12', + releases: [{ version: '1.2.3' }], + }); + }); + }); +}); diff --git a/lib/datasource/sbt-package/index.ts b/lib/datasource/sbt-package/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..bb1659ea4cdbf489fa61dabada2d17d5d126ae98 --- /dev/null +++ b/lib/datasource/sbt-package/index.ts @@ -0,0 +1,95 @@ +import { compare } from '../../versioning/maven/compare'; +import { downloadHttpProtocol } from '../maven/util'; +import { parseIndexDir } from '../sbt-plugin/util'; +import { logger } from '../../logger'; +import { GetReleasesConfig, ReleaseResult } from '../common'; + +const ensureTrailingSlash = (str: string): string => str.replace(/\/?$/, '/'); + +export async function resolvePackageReleases( + searchRoot: string, + artifact: string, + scalaVersion: string +): Promise<string[]> { + const indexContent = await downloadHttpProtocol( + ensureTrailingSlash(searchRoot), + 'sbt' + ); + if (indexContent) { + const releases: string[] = []; + const parseSubdirs = (content: string): string[] => + parseIndexDir(content, x => { + if (x === artifact) return true; + if (x.startsWith(`${artifact}_native`)) return false; + if (x.startsWith(`${artifact}_sjs`)) return false; + return x.startsWith(`${artifact}_`); + }); + const artifactSubdirs = parseSubdirs(indexContent); + let searchSubdirs = artifactSubdirs; + if ( + scalaVersion && + artifactSubdirs.includes(`${artifact}_${scalaVersion}`) + ) { + searchSubdirs = [`${artifact}_${scalaVersion}`]; + } + const parseReleases = (content: string): string[] => + parseIndexDir(content, x => !/^\.+$/.test(x)); + for (const searchSubdir of searchSubdirs) { + const content = await downloadHttpProtocol( + ensureTrailingSlash(`${searchRoot}/${searchSubdir}`), + 'sbt' + ); + if (content) { + const subdirReleases = parseReleases(content); + subdirReleases.forEach(x => releases.push(x)); + } + } + if (releases.length) return [...new Set(releases)].sort(compare); + } + + return null; +} + +export async function getPkgReleases({ + lookupName, + registryUrls, +}: GetReleasesConfig): Promise<ReleaseResult | null> { + const [groupId, artifactId] = lookupName.split(':'); + const groupIdSplit = groupId.split('.'); + const artifactIdSplit = artifactId.split('_'); + const [artifact, scalaVersion] = artifactIdSplit; + + const repoRoots = registryUrls.map(x => x.replace(/\/?$/, '')); + const searchRoots: string[] = []; + repoRoots.forEach(repoRoot => { + // Optimize lookup order + searchRoots.push(`${repoRoot}/${groupIdSplit.join('/')}`); + searchRoots.push(`${repoRoot}/${groupIdSplit.join('.')}`); + }); + + for (let idx = 0; idx < searchRoots.length; idx += 1) { + const searchRoot = searchRoots[idx]; + const versions = await resolvePackageReleases( + searchRoot, + artifact, + scalaVersion + ); + + const dependencyUrl = searchRoot; + + if (versions) { + return { + display: lookupName, + group: groupId, + name: artifactId, + dependencyUrl, + releases: versions.map(v => ({ version: v })), + }; + } + } + + logger.debug( + `No versions found for ${lookupName} in ${searchRoots.length} repositories` + ); + return null; +} diff --git a/lib/datasource/sbt-plugin/__fixtures__/maven-index.html b/lib/datasource/sbt-plugin/__fixtures__/maven-index.html new file mode 100644 index 0000000000000000000000000000000000000000..af221ebfc97f7e4541bcd9400cbb2e56b707544f --- /dev/null +++ b/lib/datasource/sbt-plugin/__fixtures__/maven-index.html @@ -0,0 +1,213 @@ +<!DOCTYPE html> +<html> + +<head> + <title>Central Repository: org/scalatest</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <style> +body { + background: #fff; +} + </style> +</head> + +<body> + <header> + <h1>org/scalatest</h1> + </header> + <hr/> + <main> + <pre id="contents"> +<a href="../">../</a> +<a href="autofix-3.0.6_2.11/" title="autofix-3.0.6_2.11/">autofix-3.0.6_2.11/</a> - - +<a href="autofix-3.0.6_2.12/" title="autofix-3.0.6_2.12/">autofix-3.0.6_2.12/</a> - - +<a href="autofix-3.0.8_2.11/" title="autofix-3.0.8_2.11/">autofix-3.0.8_2.11/</a> - - +<a href="autofix-3.0.8_2.12/" title="autofix-3.0.8_2.12/">autofix-3.0.8_2.12/</a> - - +<a href="scalatest/" title="scalatest/">scalatest/</a> - - +<a href="scalatest-all_2.10/" title="scalatest-all_2.10/">scalatest-all_2.10/</a> - - +<a href="scalatest-all_2.11/" title="scalatest-all_2.11/">scalatest-all_2.11/</a> - - +<a href="scalatest-all_sjs0.6_2.10/" title="scalatest-all_sjs0.6_2.10/">scalatest-all_sjs0.6_2.10/</a> - - +<a href="scalatest-all_sjs0.6_2.11/" title="scalatest-all_sjs0.6_2.11/">scalatest-all_sjs0.6_2.11/</a> - - +<a href="scalatest-app_2.10/" title="scalatest-app_2.10/">scalatest-app_2.10/</a> - - +<a href="scalatest-app_2.11/" title="scalatest-app_2.11/">scalatest-app_2.11/</a> - - +<a href="scalatest-app_2.12/" title="scalatest-app_2.12/">scalatest-app_2.12/</a> - - +<a href="scalatest-app_2.12.0-M3/" title="scalatest-app_2.12.0-M3/">scalatest-app_2.12.0-M3/</a> - - +<a href="scalatest-app_2.12.0-M4/" title="scalatest-app_2.12.0-M4/">scalatest-app_2.12.0-M4/</a> - - +<a href="scalatest-app_2.12.0-M5/" title="scalatest-app_2.12.0-M5/">scalatest-app_2.12.0-M5/</a> - - +<a href="scalatest-app_2.12.0-RC1/" title="scalatest-app_2.12.0-RC1/">scalatest-app_2.12.0-RC1/</a> - - +<a href="scalatest-app_2.12.0-RC2/" title="scalatest-app_2.12.0-RC2/">scalatest-app_2.12.0-RC2/</a> - - +<a href="scalatest-app_2.13.0-M1/" title="scalatest-app_2.13.0-M1/">scalatest-app_2.13.0-M1/</a> - - +<a href="scalatest-app_2.13.0-M2/" title="scalatest-app_2.13.0-M2/">scalatest-app_2.13.0-M2/</a> - - +<a href="scalatest-app_2.13.0-M3/" title="scalatest-app_2.13.0-M3/">scalatest-app_2.13.0-M3/</a> - - +<a href="scalatest-app_2.13.0-M4/" title="scalatest-app_2.13.0-M4/">scalatest-app_2.13.0-M4/</a> - - +<a href="scalatest-app_2.13.0-M5/" title="scalatest-app_2.13.0-M5/">scalatest-app_2.13.0-M5/</a> - - +<a href="scalatest-app_2.13.0-RC1/" title="scalatest-app_2.13.0-RC1/">scalatest-app_2.13.0-RC1/</a> - - +<a href="scalatest-app_2.13.0-RC2/" title="scalatest-app_2.13.0-RC2/">scalatest-app_2.13.0-RC2/</a> - - +<a href="scalatest-app_native0.3_2.11/" title="scalatest-app_native0.3_2.11/">scalatest-app_native0.3_2.11/</a> - - +<a href="scalatest-app_sjs0.6_2.10/" title="scalatest-app_sjs0.6_2.10/">scalatest-app_sjs0.6_2.10/</a> - - +<a href="scalatest-app_sjs0.6_2.11/" title="scalatest-app_sjs0.6_2.11/">scalatest-app_sjs0.6_2.11/</a> - - +<a href="scalatest-app_sjs0.6_2.12/" title="scalatest-app_sjs0.6_2.12/">scalatest-app_sjs0.6_2.12/</a> - - +<a href="scalatest-app_sjs0.6_2.12.0-M3/" title="scalatest-app_sjs0.6_2.12.0-M3/">scalatest-app_sjs0.6_2.12.0-M3/</a> - - +<a href="scalatest-app_sjs0.6_2.12.0-M4/" title="scalatest-app_sjs0.6_2.12.0-M4/">scalatest-app_sjs0.6_2.12.0-M4/</a> - - +<a href="scalatest-app_sjs0.6_2.12.0-M5/" title="scalatest-app_sjs0.6_2.12.0-M5/">scalatest-app_sjs0.6_2.12.0-M5/</a> - - +<a href="scalatest-app_sjs0.6_2.12.0-RC1/" title="scalatest-app_sjs0.6_2.12.0-RC1/">scalatest-app_sjs0.6_2.12.0-RC1/</a> - - +<a href="scalatest-app_sjs0.6_2.12.0-RC2/" title="scalatest-app_sjs0.6_2.12.0-RC2/">scalatest-app_sjs0.6_2.12.0-RC2/</a> - - +<a href="scalatest-app_sjs0.6_2.13.0-M1/" title="scalatest-app_sjs0.6_2.13.0-M1/">scalatest-app_sjs0.6_2.13.0-M1/</a> - - +<a href="scalatest-app_sjs0.6_2.13.0-M2/" title="scalatest-app_sjs0.6_2.13.0-M2/">scalatest-app_sjs0.6_2.13.0-M2/</a> - - +<a href="scalatest-app_sjs0.6_2.13.0-M3/" title="scalatest-app_sjs0.6_2.13.0-M3/">scalatest-app_sjs0.6_2.13.0-M3/</a> - - +<a href="scalatest-app_sjs0.6_2.13.0-M4/" title="scalatest-app_sjs0.6_2.13.0-M4/">scalatest-app_sjs0.6_2.13.0-M4/</a> - - +<a href="scalatest-app_sjs0.6_2.13.0-M5/" title="scalatest-app_sjs0.6_2.13.0-M5/">scalatest-app_sjs0.6_2.13.0-M5/</a> - - +<a href="scalatest-app_sjs0.6_2.13.0-RC1/" title="scalatest-app_sjs0.6_2.13.0-RC1/">scalatest-app_sjs0.6_2.13.0-RC1/</a> - - +<a href="scalatest-app_sjs0.6_2.13.0-RC2/" title="scalatest-app_sjs0.6_2.13.0-RC2/">scalatest-app_sjs0.6_2.13.0-RC2/</a> - - +<a href="scalatest-app_sjs1.0.0-M3_2.11/" title="scalatest-app_sjs1.0.0-M3_2.11/">scalatest-app_sjs1.0.0-M3_2.11/</a> - - +<a href="scalatest-app_sjs1.0.0-M3_2.12/" title="scalatest-app_sjs1.0.0-M3_2.12/">scalatest-app_sjs1.0.0-M3_2.12/</a> - - +<a href="scalatest-app_sjs1.0.0-M7_2.11/" title="scalatest-app_sjs1.0.0-M7_2.11/">scalatest-app_sjs1.0.0-M7_2.11/</a> - - +<a href="scalatest-app_sjs1.0.0-M7_2.12/" title="scalatest-app_sjs1.0.0-M7_2.12/">scalatest-app_sjs1.0.0-M7_2.12/</a> - - +<a href="scalatest-app_sjs1.0.0-M7_2.13.0-RC1/" title="scalatest-app_sjs1.0.0-M7_2.13.0-RC1/">scalatest-app_sjs1.0.0-M7_2.13.0-RC1/</a> - - +<a href="scalatest-app_sjs1.0.0-M7_2.13.0-RC2/" title="scalatest-app_sjs1.0.0-M7_2.13.0-RC2/">scalatest-app_sjs1.0.0-M7_2.13.0-RC2/</a> - - +<a href="scalatest-core_2.10/" title="scalatest-core_2.10/">scalatest-core_2.10/</a> - - +<a href="scalatest-core_2.11/" title="scalatest-core_2.11/">scalatest-core_2.11/</a> - - +<a href="scalatest-core_sjs0.6_2.10/" title="scalatest-core_sjs0.6_2.10/">scalatest-core_sjs0.6_2.10/</a> - - +<a href="scalatest-core_sjs0.6_2.11/" title="scalatest-core_sjs0.6_2.11/">scalatest-core_sjs0.6_2.11/</a> - - +<a href="scalatest-easymock_2.10/" title="scalatest-easymock_2.10/">scalatest-easymock_2.10/</a> - - +<a href="scalatest-easymock_2.11/" title="scalatest-easymock_2.11/">scalatest-easymock_2.11/</a> - - +<a href="scalatest-featurespec_2.10/" title="scalatest-featurespec_2.10/">scalatest-featurespec_2.10/</a> - - +<a href="scalatest-featurespec_2.11/" title="scalatest-featurespec_2.11/">scalatest-featurespec_2.11/</a> - - +<a href="scalatest-featurespec_sjs0.6_2.10/" title="scalatest-featurespec_sjs0.6_2.10/">scalatest-featurespec_sjs0.6_2.10/</a> - - +<a href="scalatest-featurespec_sjs0.6_2.11/" title="scalatest-featurespec_sjs0.6_2.11/">scalatest-featurespec_sjs0.6_2.11/</a> - - +<a href="scalatest-finders/" title="scalatest-finders/">scalatest-finders/</a> - - +<a href="scalatest-finders_2.9.0/" title="scalatest-finders_2.9.0/">scalatest-finders_2.9.0/</a> - - +<a href="scalatest-flatspec_2.10/" title="scalatest-flatspec_2.10/">scalatest-flatspec_2.10/</a> - - +<a href="scalatest-flatspec_2.11/" title="scalatest-flatspec_2.11/">scalatest-flatspec_2.11/</a> - - +<a href="scalatest-flatspec_sjs0.6_2.10/" title="scalatest-flatspec_sjs0.6_2.10/">scalatest-flatspec_sjs0.6_2.10/</a> - - +<a href="scalatest-flatspec_sjs0.6_2.11/" title="scalatest-flatspec_sjs0.6_2.11/">scalatest-flatspec_sjs0.6_2.11/</a> - - +<a href="scalatest-freespec_2.10/" title="scalatest-freespec_2.10/">scalatest-freespec_2.10/</a> - - +<a href="scalatest-freespec_2.11/" title="scalatest-freespec_2.11/">scalatest-freespec_2.11/</a> - - +<a href="scalatest-freespec_sjs0.6_2.10/" title="scalatest-freespec_sjs0.6_2.10/">scalatest-freespec_sjs0.6_2.10/</a> - - +<a href="scalatest-freespec_sjs0.6_2.11/" title="scalatest-freespec_sjs0.6_2.11/">scalatest-freespec_sjs0.6_2.11/</a> - - +<a href="scalatest-funspec_2.10/" title="scalatest-funspec_2.10/">scalatest-funspec_2.10/</a> - - +<a href="scalatest-funspec_2.11/" title="scalatest-funspec_2.11/">scalatest-funspec_2.11/</a> - - +<a href="scalatest-funspec_sjs0.6_2.10/" title="scalatest-funspec_sjs0.6_2.10/">scalatest-funspec_sjs0.6_2.10/</a> - - +<a href="scalatest-funspec_sjs0.6_2.11/" title="scalatest-funspec_sjs0.6_2.11/">scalatest-funspec_sjs0.6_2.11/</a> - - +<a href="scalatest-funsuite_2.10/" title="scalatest-funsuite_2.10/">scalatest-funsuite_2.10/</a> - - +<a href="scalatest-funsuite_2.11/" title="scalatest-funsuite_2.11/">scalatest-funsuite_2.11/</a> - - +<a href="scalatest-funsuite_sjs0.6_2.10/" title="scalatest-funsuite_sjs0.6_2.10/">scalatest-funsuite_sjs0.6_2.10/</a> - - +<a href="scalatest-funsuite_sjs0.6_2.11/" title="scalatest-funsuite_sjs0.6_2.11/">scalatest-funsuite_sjs0.6_2.11/</a> - - +<a href="scalatest-jmock_2.10/" title="scalatest-jmock_2.10/">scalatest-jmock_2.10/</a> - - +<a href="scalatest-jmock_2.11/" title="scalatest-jmock_2.11/">scalatest-jmock_2.11/</a> - - +<a href="scalatest-junit_2.10/" title="scalatest-junit_2.10/">scalatest-junit_2.10/</a> - - +<a href="scalatest-junit_2.11/" title="scalatest-junit_2.11/">scalatest-junit_2.11/</a> - - +<a href="scalatest-matchers-core_2.10/" title="scalatest-matchers-core_2.10/">scalatest-matchers-core_2.10/</a> - - +<a href="scalatest-matchers-core_2.11/" title="scalatest-matchers-core_2.11/">scalatest-matchers-core_2.11/</a> - - +<a href="scalatest-matchers-core_sjs0.6_2.10/" title="scalatest-matchers-core_sjs0.6_2.10/">scalatest-matchers-core_sjs0.6_2.10/</a> - - +<a href="scalatest-matchers-core_sjs0.6_2.11/" title="scalatest-matchers-core_sjs0.6_2.11/">scalatest-matchers-core_sjs0.6_2.11/</a> - - +<a href="scalatest-matchers_2.10/" title="scalatest-matchers_2.10/">scalatest-matchers_2.10/</a> - - +<a href="scalatest-matchers_2.11/" title="scalatest-matchers_2.11/">scalatest-matchers_2.11/</a> - - +<a href="scalatest-matchers_sjs0.6_2.10/" title="scalatest-matchers_sjs0.6_2.10/">scalatest-matchers_sjs0.6_2.10/</a> - - +<a href="scalatest-matchers_sjs0.6_2.11/" title="scalatest-matchers_sjs0.6_2.11/">scalatest-matchers_sjs0.6_2.11/</a> - - +<a href="scalatest-maven-plugin/" title="scalatest-maven-plugin/">scalatest-maven-plugin/</a> - - +<a href="scalatest-mustmatchers_2.10/" title="scalatest-mustmatchers_2.10/">scalatest-mustmatchers_2.10/</a> - - +<a href="scalatest-mustmatchers_2.11/" title="scalatest-mustmatchers_2.11/">scalatest-mustmatchers_2.11/</a> - - +<a href="scalatest-mustmatchers_sjs0.6_2.10/" title="scalatest-mustmatchers_sjs0.6_2.10/">scalatest-mustmatchers_sjs0.6_2.10/</a> - - +<a href="scalatest-mustmatchers_sjs0.6_2.11/" title="scalatest-mustmatchers_sjs0.6_2.11/">scalatest-mustmatchers_sjs0.6_2.11/</a> - - +<a href="scalatest-propspec_2.10/" title="scalatest-propspec_2.10/">scalatest-propspec_2.10/</a> - - +<a href="scalatest-propspec_2.11/" title="scalatest-propspec_2.11/">scalatest-propspec_2.11/</a> - - +<a href="scalatest-propspec_sjs0.6_2.10/" title="scalatest-propspec_sjs0.6_2.10/">scalatest-propspec_sjs0.6_2.10/</a> - - +<a href="scalatest-propspec_sjs0.6_2.11/" title="scalatest-propspec_sjs0.6_2.11/">scalatest-propspec_sjs0.6_2.11/</a> - - +<a href="scalatest-refspec_2.10/" title="scalatest-refspec_2.10/">scalatest-refspec_2.10/</a> - - +<a href="scalatest-refspec_2.11/" title="scalatest-refspec_2.11/">scalatest-refspec_2.11/</a> - - +<a href="scalatest-selenium_2.10/" title="scalatest-selenium_2.10/">scalatest-selenium_2.10/</a> - - +<a href="scalatest-selenium_2.11/" title="scalatest-selenium_2.11/">scalatest-selenium_2.11/</a> - - +<a href="scalatest-testng_2.10/" title="scalatest-testng_2.10/">scalatest-testng_2.10/</a> - - +<a href="scalatest-testng_2.11/" title="scalatest-testng_2.11/">scalatest-testng_2.11/</a> - - +<a href="scalatest-wordspec_2.10/" title="scalatest-wordspec_2.10/">scalatest-wordspec_2.10/</a> - - +<a href="scalatest-wordspec_2.11/" title="scalatest-wordspec_2.11/">scalatest-wordspec_2.11/</a> - - +<a href="scalatest-wordspec_sjs0.6_2.10/" title="scalatest-wordspec_sjs0.6_2.10/">scalatest-wordspec_sjs0.6_2.10/</a> - - +<a href="scalatest-wordspec_sjs0.6_2.11/" title="scalatest-wordspec_sjs0.6_2.11/">scalatest-wordspec_sjs0.6_2.11/</a> - - +<a href="scalatest_2.10/" title="scalatest_2.10/">scalatest_2.10/</a> - - +<a href="scalatest_2.10.0/" title="scalatest_2.10.0/">scalatest_2.10.0/</a> - - +<a href="scalatest_2.10.0-M4/" title="scalatest_2.10.0-M4/">scalatest_2.10.0-M4/</a> - - +<a href="scalatest_2.10.0-M5/" title="scalatest_2.10.0-M5/">scalatest_2.10.0-M5/</a> - - +<a href="scalatest_2.10.0-M6/" title="scalatest_2.10.0-M6/">scalatest_2.10.0-M6/</a> - - +<a href="scalatest_2.10.0-M7/" title="scalatest_2.10.0-M7/">scalatest_2.10.0-M7/</a> - - +<a href="scalatest_2.10.0-RC1/" title="scalatest_2.10.0-RC1/">scalatest_2.10.0-RC1/</a> - - +<a href="scalatest_2.10.0-RC2/" title="scalatest_2.10.0-RC2/">scalatest_2.10.0-RC2/</a> - - +<a href="scalatest_2.10.0-RC3/" title="scalatest_2.10.0-RC3/">scalatest_2.10.0-RC3/</a> - - +<a href="scalatest_2.10.0-RC5/" title="scalatest_2.10.0-RC5/">scalatest_2.10.0-RC5/</a> - - +<a href="scalatest_2.11/" title="scalatest_2.11/">scalatest_2.11/</a> - - +<a href="scalatest_2.11.0-M3/" title="scalatest_2.11.0-M3/">scalatest_2.11.0-M3/</a> - - +<a href="scalatest_2.11.0-M4/" title="scalatest_2.11.0-M4/">scalatest_2.11.0-M4/</a> - - +<a href="scalatest_2.11.0-M5/" title="scalatest_2.11.0-M5/">scalatest_2.11.0-M5/</a> - - +<a href="scalatest_2.11.0-M7/" title="scalatest_2.11.0-M7/">scalatest_2.11.0-M7/</a> - - +<a href="scalatest_2.11.0-M8/" title="scalatest_2.11.0-M8/">scalatest_2.11.0-M8/</a> - - +<a href="scalatest_2.11.0-RC1/" title="scalatest_2.11.0-RC1/">scalatest_2.11.0-RC1/</a> - - +<a href="scalatest_2.11.0-RC2/" title="scalatest_2.11.0-RC2/">scalatest_2.11.0-RC2/</a> - - +<a href="scalatest_2.11.0-RC3/" title="scalatest_2.11.0-RC3/">scalatest_2.11.0-RC3/</a> - - +<a href="scalatest_2.11.0-RC4/" title="scalatest_2.11.0-RC4/">scalatest_2.11.0-RC4/</a> - - +<a href="scalatest_2.12/" title="scalatest_2.12/">scalatest_2.12/</a> - - +<a href="scalatest_2.12.0-M1/" title="scalatest_2.12.0-M1/">scalatest_2.12.0-M1/</a> - - +<a href="scalatest_2.12.0-M2/" title="scalatest_2.12.0-M2/">scalatest_2.12.0-M2/</a> - - +<a href="scalatest_2.12.0-M3/" title="scalatest_2.12.0-M3/">scalatest_2.12.0-M3/</a> - - +<a href="scalatest_2.12.0-M4/" title="scalatest_2.12.0-M4/">scalatest_2.12.0-M4/</a> - - +<a href="scalatest_2.12.0-M5/" title="scalatest_2.12.0-M5/">scalatest_2.12.0-M5/</a> - - +<a href="scalatest_2.12.0-RC1/" title="scalatest_2.12.0-RC1/">scalatest_2.12.0-RC1/</a> - - +<a href="scalatest_2.12.0-RC2/" title="scalatest_2.12.0-RC2/">scalatest_2.12.0-RC2/</a> - - +<a href="scalatest_2.13.0-M1/" title="scalatest_2.13.0-M1/">scalatest_2.13.0-M1/</a> - - +<a href="scalatest_2.13.0-M2/" title="scalatest_2.13.0-M2/">scalatest_2.13.0-M2/</a> - - +<a href="scalatest_2.13.0-M3/" title="scalatest_2.13.0-M3/">scalatest_2.13.0-M3/</a> - - +<a href="scalatest_2.13.0-M4/" title="scalatest_2.13.0-M4/">scalatest_2.13.0-M4/</a> - - +<a href="scalatest_2.13.0-M5/" title="scalatest_2.13.0-M5/">scalatest_2.13.0-M5/</a> - - +<a href="scalatest_2.13.0-RC1/" title="scalatest_2.13.0-RC1/">scalatest_2.13.0-RC1/</a> - - +<a href="scalatest_2.13.0-RC2/" title="scalatest_2.13.0-RC2/">scalatest_2.13.0-RC2/</a> - - +<a href="scalatest_2.8.0/" title="scalatest_2.8.0/">scalatest_2.8.0/</a> - - +<a href="scalatest_2.8.1/" title="scalatest_2.8.1/">scalatest_2.8.1/</a> - - +<a href="scalatest_2.8.2/" title="scalatest_2.8.2/">scalatest_2.8.2/</a> - - +<a href="scalatest_2.9.0/" title="scalatest_2.9.0/">scalatest_2.9.0/</a> - - +<a href="scalatest_2.9.0-1/" title="scalatest_2.9.0-1/">scalatest_2.9.0-1/</a> - - +<a href="scalatest_2.9.0.RC3/" title="scalatest_2.9.0.RC3/">scalatest_2.9.0.RC3/</a> - - +<a href="scalatest_2.9.0.RC4/" title="scalatest_2.9.0.RC4/">scalatest_2.9.0.RC4/</a> - - +<a href="scalatest_2.9.1/" title="scalatest_2.9.1/">scalatest_2.9.1/</a> - - +<a href="scalatest_2.9.1-1/" title="scalatest_2.9.1-1/">scalatest_2.9.1-1/</a> - - +<a href="scalatest_2.9.1-1-RC1/" title="scalatest_2.9.1-1-RC1/">scalatest_2.9.1-1-RC1/</a> - - +<a href="scalatest_2.9.2/" title="scalatest_2.9.2/">scalatest_2.9.2/</a> - - +<a href="scalatest_2.9.3/" title="scalatest_2.9.3/">scalatest_2.9.3/</a> - - +<a href="scalatest_2.9.3-RC1/" title="scalatest_2.9.3-RC1/">scalatest_2.9.3-RC1/</a> - - +<a href="scalatest_2.9.3-RC2/" title="scalatest_2.9.3-RC2/">scalatest_2.9.3-RC2/</a> - - +<a href="scalatest_native0.3_2.11/" title="scalatest_native0.3_2.11/">scalatest_native0.3_2.11/</a> - - +<a href="scalatest_sjs0.6_2.10/" title="scalatest_sjs0.6_2.10/">scalatest_sjs0.6_2.10/</a> - - +<a href="scalatest_sjs0.6_2.11/" title="scalatest_sjs0.6_2.11/">scalatest_sjs0.6_2.11/</a> - - +<a href="scalatest_sjs0.6_2.12/" title="scalatest_sjs0.6_2.12/">scalatest_sjs0.6_2.12/</a> - - +<a href="scalatest_sjs0.6_2.12.0-M3/" title="scalatest_sjs0.6_2.12.0-M3/">scalatest_sjs0.6_2.12.0-M3/</a> - - +<a href="scalatest_sjs0.6_2.12.0-M4/" title="scalatest_sjs0.6_2.12.0-M4/">scalatest_sjs0.6_2.12.0-M4/</a> - - +<a href="scalatest_sjs0.6_2.12.0-M5/" title="scalatest_sjs0.6_2.12.0-M5/">scalatest_sjs0.6_2.12.0-M5/</a> - - +<a href="scalatest_sjs0.6_2.12.0-RC1/" title="scalatest_sjs0.6_2.12.0-RC1/">scalatest_sjs0.6_2.12.0-RC1/</a> - - +<a href="scalatest_sjs0.6_2.12.0-RC2/" title="scalatest_sjs0.6_2.12.0-RC2/">scalatest_sjs0.6_2.12.0-RC2/</a> - - +<a href="scalatest_sjs0.6_2.13.0-M1/" title="scalatest_sjs0.6_2.13.0-M1/">scalatest_sjs0.6_2.13.0-M1/</a> - - +<a href="scalatest_sjs0.6_2.13.0-M2/" title="scalatest_sjs0.6_2.13.0-M2/">scalatest_sjs0.6_2.13.0-M2/</a> - - +<a href="scalatest_sjs0.6_2.13.0-M3/" title="scalatest_sjs0.6_2.13.0-M3/">scalatest_sjs0.6_2.13.0-M3/</a> - - +<a href="scalatest_sjs0.6_2.13.0-M4/" title="scalatest_sjs0.6_2.13.0-M4/">scalatest_sjs0.6_2.13.0-M4/</a> - - +<a href="scalatest_sjs0.6_2.13.0-M5/" title="scalatest_sjs0.6_2.13.0-M5/">scalatest_sjs0.6_2.13.0-M5/</a> - - +<a href="scalatest_sjs0.6_2.13.0-RC1/" title="scalatest_sjs0.6_2.13.0-RC1/">scalatest_sjs0.6_2.13.0-RC1/</a> - - +<a href="scalatest_sjs0.6_2.13.0-RC2/" title="scalatest_sjs0.6_2.13.0-RC2/">scalatest_sjs0.6_2.13.0-RC2/</a> - - +<a href="scalatest_sjs1.0.0-M3_2.11/" title="scalatest_sjs1.0.0-M3_2.11/">scalatest_sjs1.0.0-M3_2.11/</a> - - +<a href="scalatest_sjs1.0.0-M3_2.12/" title="scalatest_sjs1.0.0-M3_2.12/">scalatest_sjs1.0.0-M3_2.12/</a> - - +<a href="scalatest_sjs1.0.0-M7_2.11/" title="scalatest_sjs1.0.0-M7_2.11/">scalatest_sjs1.0.0-M7_2.11/</a> - - +<a href="scalatest_sjs1.0.0-M7_2.12/" title="scalatest_sjs1.0.0-M7_2.12/">scalatest_sjs1.0.0-M7_2.12/</a> - - +<a href="scalatest_sjs1.0.0-M7_2.13.0-RC1/" title="scalatest_sjs1.0.0-M7_2.13.0-RC1/">scalatest_sjs1.0.0-M7_2.13.0-RC1/</a> - - +<a href="scalatest_sjs1.0.0-M7_2.13.0-RC2/" title="scalatest_sjs1.0.0-M7_2.13.0-RC2/">scalatest_sjs1.0.0-M7_2.13.0-RC2/</a> - - +<a href="scalatestjs_sjs0.6_2.10/" title="scalatestjs_sjs0.6_2.10/">scalatestjs_sjs0.6_2.10/</a> - - +<a href="scalatestjs_sjs0.6_2.11/" title="scalatestjs_sjs0.6_2.11/">scalatestjs_sjs0.6_2.11/</a> - - +<a href="scalatestjs_sjs0.6_2.12/" title="scalatestjs_sjs0.6_2.12/">scalatestjs_sjs0.6_2.12/</a> - - +<a href="scalatestjs_sjs0.6_2.13.0-M4/" title="scalatestjs_sjs0.6_2.13.0-M4/">scalatestjs_sjs0.6_2.13.0-M4/</a> - - +<a href="scalatestjs_sjs1.0.0-M3_2.11/" title="scalatestjs_sjs1.0.0-M3_2.11/">scalatestjs_sjs1.0.0-M3_2.11/</a> - - +<a href="scalatestjs_sjs1.0.0-M3_2.12/" title="scalatestjs_sjs1.0.0-M3_2.12/">scalatestjs_sjs1.0.0-M3_2.12/</a> - - +<a href="test-interface/" title="test-interface/">test-interface/</a> - - +<a href="maven-metadata.xml" title="maven-metadata.xml">maven-metadata.xml</a> 2017-12-01 20:15 243 +<a href="maven-metadata.xml.md5" title="maven-metadata.xml.md5">maven-metadata.xml.md5</a> 2017-12-01 20:15 32 +<a href="maven-metadata.xml.sha1" title="maven-metadata.xml.sha1">maven-metadata.xml.sha1</a> 2017-12-01 20:15 40 + </pre> + </main> + <hr/> +</body> + +</html> \ No newline at end of file diff --git a/lib/datasource/sbt-plugin/__fixtures__/sbt-plugins-index.html b/lib/datasource/sbt-plugin/__fixtures__/sbt-plugins-index.html new file mode 100644 index 0000000000000000000000000000000000000000..8b6d78e7179eec2c25a074c7946fbf7cddd2b87e --- /dev/null +++ b/lib/datasource/sbt-plugin/__fixtures__/sbt-plugins-index.html @@ -0,0 +1,354 @@ +<html> +<head> +</head> +<body> +<pre><a href="README.md">README.md</a></pre> +<pre><a href="au.com.onegeek/">au.com.onegeek/</a></pre> +<pre><a href="bavadim/">bavadim/</a></pre> +<pre><a href="be.venneborg.sbt/">be.venneborg.sbt/</a></pre> +<pre><a href="biz.cgta/">biz.cgta/</a></pre> +<pre><a href="br.com.handit/">br.com.handit/</a></pre> +<pre><a href="cc.spray/">cc.spray/</a></pre> +<pre><a href="ch.epfl.scala.index/">ch.epfl.scala.index/</a></pre> +<pre><a href="ch.epfl.scala/">ch.epfl.scala/</a></pre> +<pre><a href="ch.jodersky/">ch.jodersky/</a></pre> +<pre><a href="ch.wavein/">ch.wavein/</a></pre> +<pre><a href="ch/">ch/</a></pre> +<pre><a href="chainkite/">chainkite/</a></pre> +<pre><a href="co.vitaler/">co.vitaler/</a></pre> +<pre><a href="co/">co/</a></pre> +<pre><a href="codes.reactive.sbt/">codes.reactive.sbt/</a></pre> +<pre><a href="com.adelegue/">com.adelegue/</a></pre> +<pre><a href="com.agilogy/">com.agilogy/</a></pre> +<pre><a href="com.alpeb/">com.alpeb/</a></pre> +<pre><a href="com.anadeainc/">com.anadeainc/</a></pre> +<pre><a href="com.aol.sbt/">com.aol.sbt/</a></pre> +<pre><a href="com.benmccann/">com.benmccann/</a></pre> +<pre><a href="com.bicou.sbt/">com.bicou.sbt/</a></pre> +<pre><a href="com.birdhowl/">com.birdhowl/</a></pre> +<pre><a href="com.blstream/">com.blstream/</a></pre> +<pre><a href="com.bowlingx/">com.bowlingx/</a></pre> +<pre><a href="com.byteground/">com.byteground/</a></pre> +<pre><a href="com.cavorite/">com.cavorite/</a></pre> +<pre><a href="com.cedware/">com.cedware/</a></pre> +<pre><a href="com.clever-age/">com.clever-age/</a></pre> +<pre><a href="com.codecommit/">com.codecommit/</a></pre> +<pre><a href="com.culpin.team/">com.culpin.team/</a></pre> +<pre><a href="com.dancingcode/">com.dancingcode/</a></pre> +<pre><a href="com.databricks/">com.databricks/</a></pre> +<pre><a href="com.dayslar.play/">com.dayslar.play/</a></pre> +<pre><a href="com.dispalt.pop/">com.dispalt.pop/</a></pre> +<pre><a href="com.dispalt.relay/">com.dispalt.relay/</a></pre> +<pre><a href="com.dscleaver.sbt/">com.dscleaver.sbt/</a></pre> +<pre><a href="com.dslplatform/">com.dslplatform/</a></pre> +<pre><a href="com.dwijnand.sbtprojectgraph/">com.dwijnand.sbtprojectgraph/</a></pre> +<pre><a href="com.dwijnand/">com.dwijnand/</a></pre> +<pre><a href="com.earldouglas/">com.earldouglas/</a></pre> +<pre><a href="com.eed3si9n/">com.eed3si9n/</a></pre> +<pre><a href="com.eltimn/">com.eltimn/</a></pre> +<pre><a href="com.esdrasbeleza/">com.esdrasbeleza/</a></pre> +<pre><a href="com.evenfinancial/">com.evenfinancial/</a></pre> +<pre><a href="com.geezeo/">com.geezeo/</a></pre> +<pre><a href="com.geirsson/">com.geirsson/</a></pre> +<pre><a href="com.gilt.sbt/">com.gilt.sbt/</a></pre> +<pre><a href="com.github.DavidPerezIngeniero/">com.github.DavidPerezIngeniero/</a></pre> +<pre><a href="com.github.aafa/">com.github.aafa/</a></pre> +<pre><a href="com.github.ahjohannessen/">com.github.ahjohannessen/</a></pre> +<pre><a href="com.github.akiomik/">com.github.akiomik/</a></pre> +<pre><a href="com.github.bootlog/">com.github.bootlog/</a></pre> +<pre><a href="com.github.casualjim/">com.github.casualjim/</a></pre> +<pre><a href="com.github.catap/">com.github.catap/</a></pre> +<pre><a href="com.github.cb372/">com.github.cb372/</a></pre> +<pre><a href="com.github.citrum.webby/">com.github.citrum.webby/</a></pre> +<pre><a href="com.github.crakjie/">com.github.crakjie/</a></pre> +<pre><a href="com.github.cuzfrog/">com.github.cuzfrog/</a></pre> +<pre><a href="com.github.daniel-shuy/">com.github.daniel-shuy/</a></pre> +<pre><a href="com.github.davidpeklak/">com.github.davidpeklak/</a></pre> +<pre><a href="com.github.ddispaltro/">com.github.ddispaltro/</a></pre> +<pre><a href="com.github.dwhjames/">com.github.dwhjames/</a></pre> +<pre><a href="com.github.dwickern/">com.github.dwickern/</a></pre> +<pre><a href="com.github.gpgekko/">com.github.gpgekko/</a></pre> +<pre><a href="com.github.gseitz/">com.github.gseitz/</a></pre> +<pre><a href="com.github.inthenow/">com.github.inthenow/</a></pre> +<pre><a href="com.github.izhangzhihao/">com.github.izhangzhihao/</a></pre> +<pre><a href="com.github.jeffreyolchovy/">com.github.jeffreyolchovy/</a></pre> +<pre><a href="com.github.jodersky/">com.github.jodersky/</a></pre> +<pre><a href="com.github.marceloemanoel/">com.github.marceloemanoel/</a></pre> +<pre><a href="com.github.masseguillaume/">com.github.masseguillaume/</a></pre> +<pre><a href="com.github.mkroli/">com.github.mkroli/</a></pre> +<pre><a href="com.github.mmizutani/">com.github.mmizutani/</a></pre> +<pre><a href="com.github.mvallerie/">com.github.mvallerie/</a></pre> +<pre><a href="com.github.mwz/">com.github.mwz/</a></pre> +<pre><a href="com.github.nyavro/">com.github.nyavro/</a></pre> +<pre><a href="com.github.pinguinson/">com.github.pinguinson/</a></pre> +<pre><a href="com.github.play2war/">com.github.play2war/</a></pre> +<pre><a href="com.github.plippe/">com.github.plippe/</a></pre> +<pre><a href="com.github.qualysis/">com.github.qualysis/</a></pre> +<pre><a href="com.github.retronym/">com.github.retronym/</a></pre> +<pre><a href="com.github.saint1991/">com.github.saint1991/</a></pre> +<pre><a href="com.github.saurfang/">com.github.saurfang/</a></pre> +<pre><a href="com.github.sbt/">com.github.sbt/</a></pre> +<pre><a href="com.github.shanbin/">com.github.shanbin/</a></pre> +<pre><a href="com.github.shmishleniy/">com.github.shmishleniy/</a></pre> +<pre><a href="com.github.stonexx.sbt/">com.github.stonexx.sbt/</a></pre> +<pre><a href="com.github.tptodorov/">com.github.tptodorov/</a></pre> +<pre><a href="com.github.wookietreiber/">com.github.wookietreiber/</a></pre> +<pre><a href="com.github.zainab-ali/">com.github.zainab-ali/</a></pre> +<pre><a href="com.glngn/">com.glngn/</a></pre> +<pre><a href="com.googlecode.sbt-rats/">com.googlecode.sbt-rats/</a></pre> +<pre><a href="com.gu/">com.gu/</a></pre> +<pre><a href="com.hanhuy.sbt/">com.hanhuy.sbt/</a></pre> +<pre><a href="com.heroku/">com.heroku/</a></pre> +<pre><a href="com.hevylight/">com.hevylight/</a></pre> +<pre><a href="com.hootsuite/">com.hootsuite/</a></pre> +<pre><a href="com.hpe.sbt/">com.hpe.sbt/</a></pre> +<pre><a href="com.iheart/">com.iheart/</a></pre> +<pre><a href="com.impactua/">com.impactua/</a></pre> +<pre><a href="com.jamesneve/">com.jamesneve/</a></pre> +<pre><a href="com.jamesward/">com.jamesward/</a></pre> +<pre><a href="com.jatescher/">com.jatescher/</a></pre> +<pre><a href="com.jm2dev/">com.jm2dev/</a></pre> +<pre><a href="com.jmparsons.sbt/">com.jmparsons.sbt/</a></pre> +<pre><a href="com.jmparsons/">com.jmparsons/</a></pre> +<pre><a href="com.joescii/">com.joescii/</a></pre> +<pre><a href="com.joshcough/">com.joshcough/</a></pre> +<pre><a href="com.jsuereth/">com.jsuereth/</a></pre> +<pre><a href="com.kailuowang/">com.kailuowang/</a></pre> +<pre><a href="com.kalmanb.sbt/">com.kalmanb.sbt/</a></pre> +<pre><a href="com.lenioapp/">com.lenioapp/</a></pre> +<pre><a href="com.lightbend.akka.grpc/">com.lightbend.akka.grpc/</a></pre> +<pre><a href="com.lightbend.akka/">com.lightbend.akka/</a></pre> +<pre><a href="com.lightbend.conductr/">com.lightbend.conductr/</a></pre> +<pre><a href="com.lightbend.lagom/">com.lightbend.lagom/</a></pre> +<pre><a href="com.lightbend.paradox/">com.lightbend.paradox/</a></pre> +<pre><a href="com.lightbend.rp/">com.lightbend.rp/</a></pre> +<pre><a href="com.lightbend.sbt/">com.lightbend.sbt/</a></pre> +<pre><a href="com.lightbend/">com.lightbend/</a></pre> +<pre><a href="com.linkedin.sbt-restli/">com.linkedin.sbt-restli/</a></pre> +<pre><a href="com.localytics/">com.localytics/</a></pre> +<pre><a href="com.mariussoutier.sbt/">com.mariussoutier.sbt/</a></pre> +<pre><a href="com.markatta/">com.markatta/</a></pre> +<pre><a href="com.micronautics/">com.micronautics/</a></pre> +<pre><a href="com.mintbeans/">com.mintbeans/</a></pre> +<pre><a href="com.mojolly.scalate/">com.mojolly.scalate/</a></pre> +<pre><a href="com.nike.redwiggler.sbt/">com.nike.redwiggler.sbt/</a></pre> +<pre><a href="com.novocode/">com.novocode/</a></pre> +<pre><a href="com.olaq/">com.olaq/</a></pre> +<pre><a href="com.oliverlockwood/">com.oliverlockwood/</a></pre> +<pre><a href="com.omervk/">com.omervk/</a></pre> +<pre><a href="com.opi.lil/">com.opi.lil/</a></pre> +<pre><a href="com.oradian.sbt/">com.oradian.sbt/</a></pre> +<pre><a href="com.qonceptual.sbt/">com.qonceptual.sbt/</a></pre> +<pre><a href="com.quadstingray/">com.quadstingray/</a></pre> +<pre><a href="com.rberenguel/">com.rberenguel/</a></pre> +<pre><a href="com.roperzh.sbt/">com.roperzh.sbt/</a></pre> +<pre><a href="com.saikocat/">com.saikocat/</a></pre> +<pre><a href="com.sc.sbt/">com.sc.sbt/</a></pre> +<pre><a href="com.scalakata.metadoc/">com.scalakata.metadoc/</a></pre> +<pre><a href="com.scalakata/">com.scalakata/</a></pre> +<pre><a href="com.scalapenos/">com.scalapenos/</a></pre> +<pre><a href="com.seroperson/">com.seroperson/</a></pre> +<pre><a href="com.servicerocket/">com.servicerocket/</a></pre> +<pre><a href="com.simianquant/">com.simianquant/</a></pre> +<pre><a href="com.simplytyped/">com.simplytyped/</a></pre> +<pre><a href="com.sirocchj/">com.sirocchj/</a></pre> +<pre><a href="com.sksamuel.sbt-versions/">com.sksamuel.sbt-versions/</a></pre> +<pre><a href="com.sksamuel.scala-scales/">com.sksamuel.scala-scales/</a></pre> +<pre><a href="com.sksamuel.scapegoat/">com.sksamuel.scapegoat/</a></pre> +<pre><a href="com.sksamuel.scoverage/">com.sksamuel.scoverage/</a></pre> +<pre><a href="com.sksamuel.scribble/">com.sksamuel.scribble/</a></pre> +<pre><a href="com.sohoffice/">com.sohoffice/</a></pre> +<pre><a href="com.swoval/">com.swoval/</a></pre> +<pre><a href="com.tapad.sbt/">com.tapad.sbt/</a></pre> +<pre><a href="com.teambytes.sbt/">com.teambytes.sbt/</a></pre> +<pre><a href="com.thesamet/">com.thesamet/</a></pre> +<pre><a href="com.thoughtworks/">com.thoughtworks/</a></pre> +<pre><a href="com.timushev.sbt/">com.timushev.sbt/</a></pre> +<pre><a href="com.tmzint.sbt/">com.tmzint.sbt/</a></pre> +<pre><a href="com.trafficland/">com.trafficland/</a></pre> +<pre><a href="com.twitter/">com.twitter/</a></pre> +<pre><a href="com.typelead/">com.typelead/</a></pre> +<pre><a href="com.typesafe.akka/">com.typesafe.akka/</a></pre> +<pre><a href="com.typesafe.conductr/">com.typesafe.conductr/</a></pre> +<pre><a href="com.typesafe.play/">com.typesafe.play/</a></pre> +<pre><a href="com.typesafe.reactiveruntime/">com.typesafe.reactiveruntime/</a></pre> +<pre><a href="com.typesafe.sbt/">com.typesafe.sbt/</a></pre> +<pre><a href="com.typesafe.sbteclipse/">com.typesafe.sbteclipse/</a></pre> +<pre><a href="com.typesafe.tmp/">com.typesafe.tmp/</a></pre> +<pre><a href="com.typesafe.typesafeconductr/">com.typesafe.typesafeconductr/</a></pre> +<pre><a href="com.typesafe/">com.typesafe/</a></pre> +<pre><a href="com.untyped/">com.untyped/</a></pre> +<pre><a href="com.vmunier/">com.vmunier/</a></pre> +<pre><a href="com.xvyg/">com.xvyg/</a></pre> +<pre><a href="com.yetu/">com.yetu/</a></pre> +<pre><a href="com.zlad/">com.zlad/</a></pre> +<pre><a href="com/">com/</a></pre> +<pre><a href="coreyconnor/">coreyconnor/</a></pre> +<pre><a href="cuipengfei/">cuipengfei/</a></pre> +<pre><a href="de.cbley/">de.cbley/</a></pre> +<pre><a href="de.heikoseeberger/">de.heikoseeberger/</a></pre> +<pre><a href="de.jerman/">de.jerman/</a></pre> +<pre><a href="de.johoop/">de.johoop/</a></pre> +<pre><a href="de.knutwalker/">de.knutwalker/</a></pre> +<pre><a href="de.mediacluster.sbt/">de.mediacluster.sbt/</a></pre> +<pre><a href="de.oakgrove/">de.oakgrove/</a></pre> +<pre><a href="de.sciss/">de.sciss/</a></pre> +<pre><a href="edu.umass.cs/">edu.umass.cs/</a></pre> +<pre><a href="ee.risk.sbt.plugins/">ee.risk.sbt.plugins/</a></pre> +<pre><a href="emchristiansen/">emchristiansen/</a></pre> +<pre><a href="es.webet.play/">es.webet.play/</a></pre> +<pre><a href="es.webet.sbt/">es.webet.sbt/</a></pre> +<pre><a href="eu.arthepsy.sbt/">eu.arthepsy.sbt/</a></pre> +<pre><a href="eu.getintheloop/">eu.getintheloop/</a></pre> +<pre><a href="eu.svez/">eu.svez/</a></pre> +<pre><a href="fi.jumi.sbt/">fi.jumi.sbt/</a></pre> +<pre><a href="fi.onesto.sbt/">fi.onesto.sbt/</a></pre> +<pre><a href="g00dnatur3/">g00dnatur3/</a></pre> +<pre><a href="github.com/">github.com/</a></pre> +<pre><a href="glngn/">glngn/</a></pre> +<pre><a href="im.actor/">im.actor/</a></pre> +<pre><a href="im.dlg/">im.dlg/</a></pre> +<pre><a href="in.drajit.sbt/">in.drajit.sbt/</a></pre> +<pre><a href="info.pdalpra/">info.pdalpra/</a></pre> +<pre><a href="io.buildo/">io.buildo/</a></pre> +<pre><a href="io.dapas/">io.dapas/</a></pre> +<pre><a href="io.finstack/">io.finstack/</a></pre> +<pre><a href="io.gatling.frontline/">io.gatling.frontline/</a></pre> +<pre><a href="io.gatling/">io.gatling/</a></pre> +<pre><a href="io.github.chikei/">io.github.chikei/</a></pre> +<pre><a href="io.github.darkyenus/">io.github.darkyenus/</a></pre> +<pre><a href="io.github.davidgregory084/">io.github.davidgregory084/</a></pre> +<pre><a href="io.github.henders/">io.github.henders/</a></pre> +<pre><a href="io.github.jeremyrsmith/">io.github.jeremyrsmith/</a></pre> +<pre><a href="io.github.sugakandrey/">io.github.sugakandrey/</a></pre> +<pre><a href="io.jenner/">io.jenner/</a></pre> +<pre><a href="io.kamon/">io.kamon/</a></pre> +<pre><a href="io.methvin/">io.methvin/</a></pre> +<pre><a href="io.michaelallen.mustache/">io.michaelallen.mustache/</a></pre> +<pre><a href="io.prediction/">io.prediction/</a></pre> +<pre><a href="io.regadas/">io.regadas/</a></pre> +<pre><a href="io.scalac/">io.scalac/</a></pre> +<pre><a href="io.shaka/">io.shaka/</a></pre> +<pre><a href="io.spray/">io.spray/</a></pre> +<pre><a href="io.strd.build/">io.strd.build/</a></pre> +<pre><a href="io.sysa/">io.sysa/</a></pre> +<pre><a href="io.teamscala.sbt/">io.teamscala.sbt/</a></pre> +<pre><a href="io.xogus/">io.xogus/</a></pre> +<pre><a href="io.zastoupil/">io.zastoupil/</a></pre> +<pre><a href="io.zman/">io.zman/</a></pre> +<pre><a href="it.paperdragon/">it.paperdragon/</a></pre> +<pre><a href="ivy-1.4.xml">ivy-1.4.xml</a></pre> +<pre><a href="jsuereth/">jsuereth/</a></pre> +<pre><a href="kevinlee/">kevinlee/</a></pre> +<pre><a href="laughedelic/">laughedelic/</a></pre> +<pre><a href="lt.dvim.authors/">lt.dvim.authors/</a></pre> +<pre><a href="lt.dvim.paradox/">lt.dvim.paradox/</a></pre> +<pre><a href="me.amanj/">me.amanj/</a></pre> +<pre><a href="me.andreionut/">me.andreionut/</a></pre> +<pre><a href="me.lessis/">me.lessis/</a></pre> +<pre><a href="me.paulschwarz/">me.paulschwarz/</a></pre> +<pre><a href="me.penkov/">me.penkov/</a></pre> +<pre><a href="me.rschatz/">me.rschatz/</a></pre> +<pre><a href="me.tfeng.sbt-plugins/">me.tfeng.sbt-plugins/</a></pre> +<pre><a href="me.vican.jorge/">me.vican.jorge/</a></pre> +<pre><a href="me/">me/</a></pre> +<pre><a href="mrken/">mrken/</a></pre> +<pre><a href="name.de-vries/">name.de-vries/</a></pre> +<pre><a href="name.heikoseeberger.groll/">name.heikoseeberger.groll/</a></pre> +<pre><a href="name.heikoseeberger.sbt.groll/">name.heikoseeberger.sbt.groll/</a></pre> +<pre><a href="name.heikoseeberger.sbt.properties/">name.heikoseeberger.sbt.properties/</a></pre> +<pre><a href="name.heikoseeberger/">name.heikoseeberger/</a></pre> +<pre><a href="net.aichler/">net.aichler/</a></pre> +<pre><a href="net.bytebuddy/">net.bytebuddy/</a></pre> +<pre><a href="net.bzzt/">net.bzzt/</a></pre> +<pre><a href="net.contentobjects.jnotify/">net.contentobjects.jnotify/</a></pre> +<pre><a href="net.eamelink.sbt/">net.eamelink.sbt/</a></pre> +<pre><a href="net.eigenvalue/">net.eigenvalue/</a></pre> +<pre><a href="net.ground5hark.sbt/">net.ground5hark.sbt/</a></pre> +<pre><a href="net.katsstuff/">net.katsstuff/</a></pre> +<pre><a href="net.lullabyte/">net.lullabyte/</a></pre> +<pre><a href="net.nornagon/">net.nornagon/</a></pre> +<pre><a href="net.pishen/">net.pishen/</a></pre> +<pre><a href="net.ssanj/">net.ssanj/</a></pre> +<pre><a href="net.thunderklaus/">net.thunderklaus/</a></pre> +<pre><a href="net.virtual-void/">net.virtual-void/</a></pre> +<pre><a href="nl.anchormen.sbt/">nl.anchormen.sbt/</a></pre> +<pre><a href="nl.codestar/">nl.codestar/</a></pre> +<pre><a href="nz.co.bottech/">nz.co.bottech/</a></pre> +<pre><a href="ohnosequences/">ohnosequences/</a></pre> +<pre><a href="org.aleastChs/">org.aleastChs/</a></pre> +<pre><a href="org.allenai.plugins/">org.allenai.plugins/</a></pre> +<pre><a href="org.bitbucket.inkytonik.sbt-rats/">org.bitbucket.inkytonik.sbt-rats/</a></pre> +<pre><a href="org.bjason/">org.bjason/</a></pre> +<pre><a href="org.clapper/">org.clapper/</a></pre> +<pre><a href="org.cmj/">org.cmj/</a></pre> +<pre><a href="org.coursera.courier/">org.coursera.courier/</a></pre> +<pre><a href="org.coursera.naptime/">org.coursera.naptime/</a></pre> +<pre><a href="org.doolse/">org.doolse/</a></pre> +<pre><a href="org.duhemm/">org.duhemm/</a></pre> +<pre><a href="org.foundweekends.conscript/">org.foundweekends.conscript/</a></pre> +<pre><a href="org.foundweekends.giter8/">org.foundweekends.giter8/</a></pre> +<pre><a href="org.foundweekends/">org.foundweekends/</a></pre> +<pre><a href="org.github.ngbinh/">org.github.ngbinh/</a></pre> +<pre><a href="org.h3nk3/">org.h3nk3/</a></pre> +<pre><a href="org.hypercomp/">org.hypercomp/</a></pre> +<pre><a href="org.irundaia.sbt/">org.irundaia.sbt/</a></pre> +<pre><a href="org.jetbrains.teamcity.plugins/">org.jetbrains.teamcity.plugins/</a></pre> +<pre><a href="org.jetbrains/">org.jetbrains/</a></pre> +<pre><a href="org.jruby/">org.jruby/</a></pre> +<pre><a href="org.lifty/">org.lifty/</a></pre> +<pre><a href="org.lyranthe.sbt/">org.lyranthe.sbt/</a></pre> +<pre><a href="org.madoushi.sbt/">org.madoushi.sbt/</a></pre> +<pre><a href="org.make/">org.make/</a></pre> +<pre><a href="org.neolin.sbt/">org.neolin.sbt/</a></pre> +<pre><a href="org.netbeans.nbsbt/">org.netbeans.nbsbt/</a></pre> +<pre><a href="org.opencommercesearch/">org.opencommercesearch/</a></pre> +<pre><a href="org.pitest.sbt/">org.pitest.sbt/</a></pre> +<pre><a href="org.planet42/">org.planet42/</a></pre> +<pre><a href="org.portable-scala/">org.portable-scala/</a></pre> +<pre><a href="org.roboscala/">org.roboscala/</a></pre> +<pre><a href="org.scala-android/">org.scala-android/</a></pre> +<pre><a href="org.scala-js/">org.scala-js/</a></pre> +<pre><a href="org.scala-lang.modules.scalajs/">org.scala-lang.modules.scalajs/</a></pre> +<pre><a href="org.scala-lang.modules/">org.scala-lang.modules/</a></pre> +<pre><a href="org.scala-native/">org.scala-native/</a></pre> +<pre><a href="org.scala-sbt.plugins/">org.scala-sbt.plugins/</a></pre> +<pre><a href="org.scala-sbt/">org.scala-sbt/</a></pre> +<pre><a href="org.scalameta/">org.scalameta/</a></pre> +<pre><a href="org.scalastyle/">org.scalastyle/</a></pre> +<pre><a href="org.scalatra.requirejs/">org.scalatra.requirejs/</a></pre> +<pre><a href="org.scalatra.sbt/">org.scalatra.sbt/</a></pre> +<pre><a href="org.scalavista/">org.scalavista/</a></pre> +<pre><a href="org.scoverage/">org.scoverage/</a></pre> +<pre><a href="org.tpolecat/">org.tpolecat/</a></pre> +<pre><a href="org.typelevel/">org.typelevel/</a></pre> +<pre><a href="org.zjulambda.scala/">org.zjulambda.scala/</a></pre> +<pre><a href="org/">org/</a></pre> +<pre><a href="pl.otrebski/">pl.otrebski/</a></pre> +<pre><a href="pl.project13.sbt/">pl.project13.sbt/</a></pre> +<pre><a href="pl.project13.scala/">pl.project13.scala/</a></pre> +<pre><a href="pl.tues/">pl.tues/</a></pre> +<pre><a href="rocks.muki/">rocks.muki/</a></pre> +<pre><a href="ru.dokwork/">ru.dokwork/</a></pre> +<pre><a href="ru.kotobotov/">ru.kotobotov/</a></pre> +<pre><a href="ru.pravo/">ru.pravo/</a></pre> +<pre><a href="sbt-plugin-releases/">sbt-plugin-releases/</a></pre> +<pre><a href="sbt-texttest-1.4-javadoc.jar">sbt-texttest-1.4-javadoc.jar</a></pre> +<pre><a href="sbt-texttest-1.4-sources.jar">sbt-texttest-1.4-sources.jar</a></pre> +<pre><a href="sbt-texttest-1.4.jar">sbt-texttest-1.4.jar</a></pre> +<pre><a href="sbt/">sbt/</a></pre> +<pre><a href="scalajs-react-interface/">scalajs-react-interface/</a></pre> +<pre><a href="se.sisyfosdigital.sbt/">se.sisyfosdigital.sbt/</a></pre> +<pre><a href="se.yobriefca/">se.yobriefca/</a></pre> +<pre><a href="securesocial/">securesocial/</a></pre> +<pre><a href="spartakus/">spartakus/</a></pre> +<pre><a href="sqlpt/">sqlpt/</a></pre> +<pre><a href="stejskal/">stejskal/</a></pre> +<pre><a href="tech.ant8e/">tech.ant8e/</a></pre> +<pre><a href="ub-interactive/">ub-interactive/</a></pre> +<pre><a href="uk.co.josephearl/">uk.co.josephearl/</a></pre> +<pre><a href="uk.co.randomcoding/">uk.co.randomcoding/</a></pre> +<pre><a href="works.mesh/">works.mesh/</a></pre> +<pre><a href="woshilaiceshide/">woshilaiceshide/</a></pre> +</body> +</html> diff --git a/lib/datasource/sbt-plugin/__snapshots__/index.spec.ts.snap b/lib/datasource/sbt-plugin/__snapshots__/index.spec.ts.snap new file mode 100644 index 0000000000000000000000000000000000000000..10bcead987b6215d176e9ba3f3d636344b7a5db9 --- /dev/null +++ b/lib/datasource/sbt-plugin/__snapshots__/index.spec.ts.snap @@ -0,0 +1,537 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`datasource/sbt parses Maven index directory 1`] = ` +Array [ + "autofix-3.0.6_2.11", + "autofix-3.0.6_2.12", + "autofix-3.0.8_2.11", + "autofix-3.0.8_2.12", + "scalatest", + "scalatest-all_2.10", + "scalatest-all_2.11", + "scalatest-all_sjs0.6_2.10", + "scalatest-all_sjs0.6_2.11", + "scalatest-app_2.10", + "scalatest-app_2.11", + "scalatest-app_2.12", + "scalatest-app_2.12.0-M3", + "scalatest-app_2.12.0-M4", + "scalatest-app_2.12.0-M5", + "scalatest-app_2.12.0-RC1", + "scalatest-app_2.12.0-RC2", + "scalatest-app_2.13.0-M1", + "scalatest-app_2.13.0-M2", + "scalatest-app_2.13.0-M3", + "scalatest-app_2.13.0-M4", + "scalatest-app_2.13.0-M5", + "scalatest-app_2.13.0-RC1", + "scalatest-app_2.13.0-RC2", + "scalatest-app_native0.3_2.11", + "scalatest-app_sjs0.6_2.10", + "scalatest-app_sjs0.6_2.11", + "scalatest-app_sjs0.6_2.12", + "scalatest-app_sjs0.6_2.12.0-M3", + "scalatest-app_sjs0.6_2.12.0-M4", + "scalatest-app_sjs0.6_2.12.0-M5", + "scalatest-app_sjs0.6_2.12.0-RC1", + "scalatest-app_sjs0.6_2.12.0-RC2", + "scalatest-app_sjs0.6_2.13.0-M1", + "scalatest-app_sjs0.6_2.13.0-M2", + "scalatest-app_sjs0.6_2.13.0-M3", + "scalatest-app_sjs0.6_2.13.0-M4", + "scalatest-app_sjs0.6_2.13.0-M5", + "scalatest-app_sjs0.6_2.13.0-RC1", + "scalatest-app_sjs0.6_2.13.0-RC2", + "scalatest-app_sjs1.0.0-M3_2.11", + "scalatest-app_sjs1.0.0-M3_2.12", + "scalatest-app_sjs1.0.0-M7_2.11", + "scalatest-app_sjs1.0.0-M7_2.12", + "scalatest-app_sjs1.0.0-M7_2.13.0-RC1", + "scalatest-app_sjs1.0.0-M7_2.13.0-RC2", + "scalatest-core_2.10", + "scalatest-core_2.11", + "scalatest-core_sjs0.6_2.10", + "scalatest-core_sjs0.6_2.11", + "scalatest-easymock_2.10", + "scalatest-easymock_2.11", + "scalatest-featurespec_2.10", + "scalatest-featurespec_2.11", + "scalatest-featurespec_sjs0.6_2.10", + "scalatest-featurespec_sjs0.6_2.11", + "scalatest-finders", + "scalatest-finders_2.9.0", + "scalatest-flatspec_2.10", + "scalatest-flatspec_2.11", + "scalatest-flatspec_sjs0.6_2.10", + "scalatest-flatspec_sjs0.6_2.11", + "scalatest-freespec_2.10", + "scalatest-freespec_2.11", + "scalatest-freespec_sjs0.6_2.10", + "scalatest-freespec_sjs0.6_2.11", + "scalatest-funspec_2.10", + "scalatest-funspec_2.11", + "scalatest-funspec_sjs0.6_2.10", + "scalatest-funspec_sjs0.6_2.11", + "scalatest-funsuite_2.10", + "scalatest-funsuite_2.11", + "scalatest-funsuite_sjs0.6_2.10", + "scalatest-funsuite_sjs0.6_2.11", + "scalatest-jmock_2.10", + "scalatest-jmock_2.11", + "scalatest-junit_2.10", + "scalatest-junit_2.11", + "scalatest-matchers-core_2.10", + "scalatest-matchers-core_2.11", + "scalatest-matchers-core_sjs0.6_2.10", + "scalatest-matchers-core_sjs0.6_2.11", + "scalatest-matchers_2.10", + "scalatest-matchers_2.11", + "scalatest-matchers_sjs0.6_2.10", + "scalatest-matchers_sjs0.6_2.11", + "scalatest-maven-plugin", + "scalatest-mustmatchers_2.10", + "scalatest-mustmatchers_2.11", + "scalatest-mustmatchers_sjs0.6_2.10", + "scalatest-mustmatchers_sjs0.6_2.11", + "scalatest-propspec_2.10", + "scalatest-propspec_2.11", + "scalatest-propspec_sjs0.6_2.10", + "scalatest-propspec_sjs0.6_2.11", + "scalatest-refspec_2.10", + "scalatest-refspec_2.11", + "scalatest-selenium_2.10", + "scalatest-selenium_2.11", + "scalatest-testng_2.10", + "scalatest-testng_2.11", + "scalatest-wordspec_2.10", + "scalatest-wordspec_2.11", + "scalatest-wordspec_sjs0.6_2.10", + "scalatest-wordspec_sjs0.6_2.11", + "scalatest_2.10", + "scalatest_2.10.0", + "scalatest_2.10.0-M4", + "scalatest_2.10.0-M5", + "scalatest_2.10.0-M6", + "scalatest_2.10.0-M7", + "scalatest_2.10.0-RC1", + "scalatest_2.10.0-RC2", + "scalatest_2.10.0-RC3", + "scalatest_2.10.0-RC5", + "scalatest_2.11", + "scalatest_2.11.0-M3", + "scalatest_2.11.0-M4", + "scalatest_2.11.0-M5", + "scalatest_2.11.0-M7", + "scalatest_2.11.0-M8", + "scalatest_2.11.0-RC1", + "scalatest_2.11.0-RC2", + "scalatest_2.11.0-RC3", + "scalatest_2.11.0-RC4", + "scalatest_2.12", + "scalatest_2.12.0-M1", + "scalatest_2.12.0-M2", + "scalatest_2.12.0-M3", + "scalatest_2.12.0-M4", + "scalatest_2.12.0-M5", + "scalatest_2.12.0-RC1", + "scalatest_2.12.0-RC2", + "scalatest_2.13.0-M1", + "scalatest_2.13.0-M2", + "scalatest_2.13.0-M3", + "scalatest_2.13.0-M4", + "scalatest_2.13.0-M5", + "scalatest_2.13.0-RC1", + "scalatest_2.13.0-RC2", + "scalatest_2.8.0", + "scalatest_2.8.1", + "scalatest_2.8.2", + "scalatest_2.9.0", + "scalatest_2.9.0-1", + "scalatest_2.9.0.RC3", + "scalatest_2.9.0.RC4", + "scalatest_2.9.1", + "scalatest_2.9.1-1", + "scalatest_2.9.1-1-RC1", + "scalatest_2.9.2", + "scalatest_2.9.3", + "scalatest_2.9.3-RC1", + "scalatest_2.9.3-RC2", + "scalatest_native0.3_2.11", + "scalatest_sjs0.6_2.10", + "scalatest_sjs0.6_2.11", + "scalatest_sjs0.6_2.12", + "scalatest_sjs0.6_2.12.0-M3", + "scalatest_sjs0.6_2.12.0-M4", + "scalatest_sjs0.6_2.12.0-M5", + "scalatest_sjs0.6_2.12.0-RC1", + "scalatest_sjs0.6_2.12.0-RC2", + "scalatest_sjs0.6_2.13.0-M1", + "scalatest_sjs0.6_2.13.0-M2", + "scalatest_sjs0.6_2.13.0-M3", + "scalatest_sjs0.6_2.13.0-M4", + "scalatest_sjs0.6_2.13.0-M5", + "scalatest_sjs0.6_2.13.0-RC1", + "scalatest_sjs0.6_2.13.0-RC2", + "scalatest_sjs1.0.0-M3_2.11", + "scalatest_sjs1.0.0-M3_2.12", + "scalatest_sjs1.0.0-M7_2.11", + "scalatest_sjs1.0.0-M7_2.12", + "scalatest_sjs1.0.0-M7_2.13.0-RC1", + "scalatest_sjs1.0.0-M7_2.13.0-RC2", + "scalatestjs_sjs0.6_2.10", + "scalatestjs_sjs0.6_2.11", + "scalatestjs_sjs0.6_2.12", + "scalatestjs_sjs0.6_2.13.0-M4", + "scalatestjs_sjs1.0.0-M3_2.11", + "scalatestjs_sjs1.0.0-M3_2.12", + "test-interface", +] +`; + +exports[`datasource/sbt parses sbt index directory 1`] = ` +Array [ + "au.com.onegeek", + "bavadim", + "be.venneborg.sbt", + "biz.cgta", + "br.com.handit", + "cc.spray", + "ch.epfl.scala.index", + "ch.epfl.scala", + "ch.jodersky", + "ch.wavein", + "ch", + "chainkite", + "co.vitaler", + "co", + "codes.reactive.sbt", + "com.adelegue", + "com.agilogy", + "com.alpeb", + "com.anadeainc", + "com.aol.sbt", + "com.benmccann", + "com.bicou.sbt", + "com.birdhowl", + "com.blstream", + "com.bowlingx", + "com.byteground", + "com.cavorite", + "com.cedware", + "com.clever-age", + "com.codecommit", + "com.culpin.team", + "com.dancingcode", + "com.databricks", + "com.dayslar.play", + "com.dispalt.pop", + "com.dispalt.relay", + "com.dscleaver.sbt", + "com.dslplatform", + "com.dwijnand.sbtprojectgraph", + "com.dwijnand", + "com.earldouglas", + "com.eed3si9n", + "com.eltimn", + "com.esdrasbeleza", + "com.evenfinancial", + "com.geezeo", + "com.geirsson", + "com.gilt.sbt", + "com.github.DavidPerezIngeniero", + "com.github.aafa", + "com.github.ahjohannessen", + "com.github.akiomik", + "com.github.bootlog", + "com.github.casualjim", + "com.github.catap", + "com.github.cb372", + "com.github.citrum.webby", + "com.github.crakjie", + "com.github.cuzfrog", + "com.github.daniel-shuy", + "com.github.davidpeklak", + "com.github.ddispaltro", + "com.github.dwhjames", + "com.github.dwickern", + "com.github.gpgekko", + "com.github.gseitz", + "com.github.inthenow", + "com.github.izhangzhihao", + "com.github.jeffreyolchovy", + "com.github.jodersky", + "com.github.marceloemanoel", + "com.github.masseguillaume", + "com.github.mkroli", + "com.github.mmizutani", + "com.github.mvallerie", + "com.github.mwz", + "com.github.nyavro", + "com.github.pinguinson", + "com.github.play2war", + "com.github.plippe", + "com.github.qualysis", + "com.github.retronym", + "com.github.saint1991", + "com.github.saurfang", + "com.github.sbt", + "com.github.shanbin", + "com.github.shmishleniy", + "com.github.stonexx.sbt", + "com.github.tptodorov", + "com.github.wookietreiber", + "com.github.zainab-ali", + "com.glngn", + "com.googlecode.sbt-rats", + "com.gu", + "com.hanhuy.sbt", + "com.heroku", + "com.hevylight", + "com.hootsuite", + "com.hpe.sbt", + "com.iheart", + "com.impactua", + "com.jamesneve", + "com.jamesward", + "com.jatescher", + "com.jm2dev", + "com.jmparsons.sbt", + "com.jmparsons", + "com.joescii", + "com.joshcough", + "com.jsuereth", + "com.kailuowang", + "com.kalmanb.sbt", + "com.lenioapp", + "com.lightbend.akka.grpc", + "com.lightbend.akka", + "com.lightbend.conductr", + "com.lightbend.lagom", + "com.lightbend.paradox", + "com.lightbend.rp", + "com.lightbend.sbt", + "com.lightbend", + "com.linkedin.sbt-restli", + "com.localytics", + "com.mariussoutier.sbt", + "com.markatta", + "com.micronautics", + "com.mintbeans", + "com.mojolly.scalate", + "com.nike.redwiggler.sbt", + "com.novocode", + "com.olaq", + "com.oliverlockwood", + "com.omervk", + "com.opi.lil", + "com.oradian.sbt", + "com.qonceptual.sbt", + "com.quadstingray", + "com.rberenguel", + "com.roperzh.sbt", + "com.saikocat", + "com.sc.sbt", + "com.scalakata.metadoc", + "com.scalakata", + "com.scalapenos", + "com.seroperson", + "com.servicerocket", + "com.simianquant", + "com.simplytyped", + "com.sirocchj", + "com.sksamuel.sbt-versions", + "com.sksamuel.scala-scales", + "com.sksamuel.scapegoat", + "com.sksamuel.scoverage", + "com.sksamuel.scribble", + "com.sohoffice", + "com.swoval", + "com.tapad.sbt", + "com.teambytes.sbt", + "com.thesamet", + "com.thoughtworks", + "com.timushev.sbt", + "com.tmzint.sbt", + "com.trafficland", + "com.twitter", + "com.typelead", + "com.typesafe.akka", + "com.typesafe.conductr", + "com.typesafe.play", + "com.typesafe.reactiveruntime", + "com.typesafe.sbt", + "com.typesafe.sbteclipse", + "com.typesafe.tmp", + "com.typesafe.typesafeconductr", + "com.typesafe", + "com.untyped", + "com.vmunier", + "com.xvyg", + "com.yetu", + "com.zlad", + "com", + "coreyconnor", + "cuipengfei", + "de.cbley", + "de.heikoseeberger", + "de.jerman", + "de.johoop", + "de.knutwalker", + "de.mediacluster.sbt", + "de.oakgrove", + "de.sciss", + "edu.umass.cs", + "ee.risk.sbt.plugins", + "emchristiansen", + "es.webet.play", + "es.webet.sbt", + "eu.arthepsy.sbt", + "eu.getintheloop", + "eu.svez", + "fi.jumi.sbt", + "fi.onesto.sbt", + "g00dnatur3", + "github.com", + "glngn", + "im.actor", + "im.dlg", + "in.drajit.sbt", + "info.pdalpra", + "io.buildo", + "io.dapas", + "io.finstack", + "io.gatling.frontline", + "io.gatling", + "io.github.chikei", + "io.github.darkyenus", + "io.github.davidgregory084", + "io.github.henders", + "io.github.jeremyrsmith", + "io.github.sugakandrey", + "io.jenner", + "io.kamon", + "io.methvin", + "io.michaelallen.mustache", + "io.prediction", + "io.regadas", + "io.scalac", + "io.shaka", + "io.spray", + "io.strd.build", + "io.sysa", + "io.teamscala.sbt", + "io.xogus", + "io.zastoupil", + "io.zman", + "it.paperdragon", + "jsuereth", + "kevinlee", + "laughedelic", + "lt.dvim.authors", + "lt.dvim.paradox", + "me.amanj", + "me.andreionut", + "me.lessis", + "me.paulschwarz", + "me.penkov", + "me.rschatz", + "me.tfeng.sbt-plugins", + "me.vican.jorge", + "me", + "mrken", + "name.de-vries", + "name.heikoseeberger.groll", + "name.heikoseeberger.sbt.groll", + "name.heikoseeberger.sbt.properties", + "name.heikoseeberger", + "net.aichler", + "net.bytebuddy", + "net.bzzt", + "net.contentobjects.jnotify", + "net.eamelink.sbt", + "net.eigenvalue", + "net.ground5hark.sbt", + "net.katsstuff", + "net.lullabyte", + "net.nornagon", + "net.pishen", + "net.ssanj", + "net.thunderklaus", + "net.virtual-void", + "nl.anchormen.sbt", + "nl.codestar", + "nz.co.bottech", + "ohnosequences", + "org.aleastChs", + "org.allenai.plugins", + "org.bitbucket.inkytonik.sbt-rats", + "org.bjason", + "org.clapper", + "org.cmj", + "org.coursera.courier", + "org.coursera.naptime", + "org.doolse", + "org.duhemm", + "org.foundweekends.conscript", + "org.foundweekends.giter8", + "org.foundweekends", + "org.github.ngbinh", + "org.h3nk3", + "org.hypercomp", + "org.irundaia.sbt", + "org.jetbrains.teamcity.plugins", + "org.jetbrains", + "org.jruby", + "org.lifty", + "org.lyranthe.sbt", + "org.madoushi.sbt", + "org.make", + "org.neolin.sbt", + "org.netbeans.nbsbt", + "org.opencommercesearch", + "org.pitest.sbt", + "org.planet42", + "org.portable-scala", + "org.roboscala", + "org.scala-android", + "org.scala-js", + "org.scala-lang.modules.scalajs", + "org.scala-lang.modules", + "org.scala-native", + "org.scala-sbt.plugins", + "org.scala-sbt", + "org.scalameta", + "org.scalastyle", + "org.scalatra.requirejs", + "org.scalatra.sbt", + "org.scalavista", + "org.scoverage", + "org.tpolecat", + "org.typelevel", + "org.zjulambda.scala", + "org", + "pl.otrebski", + "pl.project13.sbt", + "pl.project13.scala", + "pl.tues", + "rocks.muki", + "ru.dokwork", + "ru.kotobotov", + "ru.pravo", + "sbt-plugin-releases", + "sbt", + "scalajs-react-interface", + "se.sisyfosdigital.sbt", + "se.yobriefca", + "securesocial", + "spartakus", + "sqlpt", + "stejskal", + "tech.ant8e", + "ub-interactive", + "uk.co.josephearl", + "uk.co.randomcoding", + "works.mesh", + "woshilaiceshide", +] +`; diff --git a/lib/datasource/sbt/index.spec.ts b/lib/datasource/sbt-plugin/index.spec.ts similarity index 76% rename from lib/datasource/sbt/index.spec.ts rename to lib/datasource/sbt-plugin/index.spec.ts index d5af55a2670a78fcc84884296c22ef533227de8b..d7c34792dfedbe1be6201fae5f88431c5b6b081d 100644 --- a/lib/datasource/sbt/index.spec.ts +++ b/lib/datasource/sbt-plugin/index.spec.ts @@ -4,7 +4,6 @@ import nock from 'nock'; import { getPkgReleases } from '.'; import { DEFAULT_MAVEN_REPO } from '../../manager/maven/extract'; import { parseIndexDir, SBT_PLUGINS_REPO } from './util'; -import * as ivyVersioning from '../../versioning/ivy'; const mavenIndexHtml = fs.readFileSync( path.resolve(__dirname, `./__fixtures__/maven-index.html`), @@ -100,58 +99,21 @@ describe('datasource/sbt', () => { it('returns null in case of errors', async () => { expect( await getPkgReleases({ - versioning: ivyVersioning.id, lookupName: 'org.scalatest:scalatest', registryUrls: ['https://failed_repo/maven'], }) ).toEqual(null); expect( await getPkgReleases({ - versioning: ivyVersioning.id, lookupName: 'org.scalatest:scalaz', - depType: 'plugin', registryUrls: [SBT_PLUGINS_REPO], }) ).toEqual(null); }); - it('fetches releases from Maven', async () => { - expect( - await getPkgReleases({ - versioning: ivyVersioning.id, - lookupName: 'org.scalatest:scalatest', - registryUrls: [ - 'https://failed_repo/maven', - DEFAULT_MAVEN_REPO, - SBT_PLUGINS_REPO, - ], - }) - ).toEqual({ - dependencyUrl: 'https://repo.maven.apache.org/maven2/org/scalatest', - display: 'org.scalatest:scalatest', - group: 'org.scalatest', - name: 'scalatest', - releases: [{ version: '1.2.0' }, { version: '1.2.3' }], - }); - expect( - await getPkgReleases({ - versioning: ivyVersioning.id, - lookupName: 'org.scalatest:scalatest_2.12', - registryUrls: [DEFAULT_MAVEN_REPO, SBT_PLUGINS_REPO], - }) - ).toEqual({ - dependencyUrl: 'https://repo.maven.apache.org/maven2/org/scalatest', - display: 'org.scalatest:scalatest_2.12', - group: 'org.scalatest', - name: 'scalatest_2.12', - releases: [{ version: '1.2.3' }], - }); - }); it('fetches sbt plugins', async () => { expect( await getPkgReleases({ - versioning: ivyVersioning.id, lookupName: 'org.foundweekends:sbt-bintray', - depType: 'plugin', registryUrls: [DEFAULT_MAVEN_REPO, SBT_PLUGINS_REPO], }) ).toEqual({ @@ -164,9 +126,7 @@ describe('datasource/sbt', () => { }); expect( await getPkgReleases({ - versioning: ivyVersioning.id, lookupName: 'org.foundweekends:sbt-bintray_2.12', - depType: 'plugin', registryUrls: [DEFAULT_MAVEN_REPO, SBT_PLUGINS_REPO], }) ).toEqual({ diff --git a/lib/datasource/sbt/index.ts b/lib/datasource/sbt-plugin/index.ts similarity index 54% rename from lib/datasource/sbt/index.ts rename to lib/datasource/sbt-plugin/index.ts index 293b24e3acdfedf963d0136ec182329512b1df03..450fb909f4c19049450d2762a585327724f3e357 100644 --- a/lib/datasource/sbt/index.ts +++ b/lib/datasource/sbt-plugin/index.ts @@ -3,53 +3,10 @@ import { downloadHttpProtocol } from '../maven/util'; import { parseIndexDir, SBT_PLUGINS_REPO } from './util'; import { logger } from '../../logger'; import { GetReleasesConfig, ReleaseResult } from '../common'; +import { resolvePackageReleases } from '../sbt-package'; const ensureTrailingSlash = (str: string): string => str.replace(/\/?$/, '/'); -async function resolvePackageReleases( - searchRoot: string, - artifact: string, - scalaVersion: string -): Promise<string[]> { - const indexContent = await downloadHttpProtocol( - ensureTrailingSlash(searchRoot), - 'sbt' - ); - if (indexContent) { - const releases: string[] = []; - const parseSubdirs = (content: string): string[] => - parseIndexDir(content, x => { - if (x === artifact) return true; - if (x.startsWith(`${artifact}_native`)) return false; - if (x.startsWith(`${artifact}_sjs`)) return false; - return x.startsWith(`${artifact}_`); - }); - const artifactSubdirs = parseSubdirs(indexContent); - let searchSubdirs = artifactSubdirs; - if ( - scalaVersion && - artifactSubdirs.includes(`${artifact}_${scalaVersion}`) - ) { - searchSubdirs = [`${artifact}_${scalaVersion}`]; - } - const parseReleases = (content: string): string[] => - parseIndexDir(content, x => !/^\.+$/.test(x)); - for (const searchSubdir of searchSubdirs) { - const content = await downloadHttpProtocol( - ensureTrailingSlash(`${searchRoot}/${searchSubdir}`), - 'sbt' - ); - if (content) { - const subdirReleases = parseReleases(content); - subdirReleases.forEach(x => releases.push(x)); - } - } - if (releases.length) return [...new Set(releases)].sort(compare); - } - - return null; -} - async function resolvePluginReleases( rootUrl: string, artifact: string, @@ -95,15 +52,11 @@ async function resolvePluginReleases( return resolvePackageReleases(rootUrl, artifact, scalaVersion); } -export async function getPkgReleases( - config: GetReleasesConfig -): Promise<ReleaseResult | null> { - const { lookupName, depType } = config; - - const registryUrls = - depType === 'plugin' - ? [SBT_PLUGINS_REPO, ...config.registryUrls] - : config.registryUrls; +export async function getPkgReleases({ + lookupName, + registryUrls: configRegistryUrls, +}: GetReleasesConfig): Promise<ReleaseResult | null> { + const registryUrls = [SBT_PLUGINS_REPO, ...configRegistryUrls]; const [groupId, artifactId] = lookupName.split(':'); const groupIdSplit = groupId.split('.'); @@ -114,24 +67,19 @@ export async function getPkgReleases( const searchRoots: string[] = []; repoRoots.forEach(repoRoot => { // Optimize lookup order - if (depType === 'plugin') { - searchRoots.push(`${repoRoot}/${groupIdSplit.join('.')}`); - searchRoots.push(`${repoRoot}/${groupIdSplit.join('/')}`); - } else { - searchRoots.push(`${repoRoot}/${groupIdSplit.join('/')}`); - searchRoots.push(`${repoRoot}/${groupIdSplit.join('.')}`); - } + searchRoots.push(`${repoRoot}/${groupIdSplit.join('.')}`); + searchRoots.push(`${repoRoot}/${groupIdSplit.join('/')}`); }); for (let idx = 0; idx < searchRoots.length; idx += 1) { const searchRoot = searchRoots[idx]; - const versions = - depType === 'plugin' - ? await resolvePluginReleases(searchRoot, artifact, scalaVersion) - : await resolvePackageReleases(searchRoot, artifact, scalaVersion); + const versions = await resolvePluginReleases( + searchRoot, + artifact, + scalaVersion + ); - const dependencyUrl = - depType === 'plugin' ? `${searchRoot}/${artifact}` : searchRoot; + const dependencyUrl = `${searchRoot}/${artifact}`; if (versions) { return { diff --git a/lib/datasource/sbt/util.ts b/lib/datasource/sbt-plugin/util.ts similarity index 100% rename from lib/datasource/sbt/util.ts rename to lib/datasource/sbt-plugin/util.ts diff --git a/lib/manager/gradle/__snapshots__/index.spec.ts.snap b/lib/manager/gradle/__snapshots__/index.spec.ts.snap index 04646a3325dae61c602f4a5fb98e5b424c715b21..a4224fe6e63c15fb21163f89466bb3915e85647f 100644 --- a/lib/manager/gradle/__snapshots__/index.spec.ts.snap +++ b/lib/manager/gradle/__snapshots__/index.spec.ts.snap @@ -158,7 +158,7 @@ Array [ }, Object { "currentValue": "3.9.0", - "datasource": "sbt", + "datasource": "sbt-package", "depGroup": "com.typesafe.scala-logging", "depName": "com.typesafe.scala-logging:scala-logging", "name": "scala-logging_%%", @@ -216,7 +216,7 @@ Array [ }, Object { "currentValue": "3.9.0", - "datasource": "sbt", + "datasource": "sbt-package", "depGroup": "com.typesafe.scala-logging", "depName": "com.typesafe.scala-logging:scala-logging", "name": "scala-logging_%%", @@ -301,7 +301,7 @@ Array [ }, Object { "currentValue": "3.9.0", - "datasource": "sbt", + "datasource": "sbt-package", "depGroup": "com.typesafe.scala-logging", "depName": "com.typesafe.scala-logging:scala-logging", "name": "scala-logging_%%", @@ -386,7 +386,7 @@ Array [ }, Object { "currentValue": "3.9.0", - "datasource": "sbt", + "datasource": "sbt-package", "depGroup": "com.typesafe.scala-logging", "depName": "com.typesafe.scala-logging:scala-logging", "name": "scala-logging_%%", @@ -444,7 +444,7 @@ Array [ }, Object { "currentValue": "3.9.0", - "datasource": "sbt", + "datasource": "sbt-package", "depGroup": "com.typesafe.scala-logging", "depName": "com.typesafe.scala-logging:scala-logging", "name": "scala-logging_%%", diff --git a/lib/manager/gradle/gradle-updates-report.ts b/lib/manager/gradle/gradle-updates-report.ts index fac1d11a4e3f770b39f2d2eb834f139db019f80f..273238e9d34e08a8c5ca5d9fd75f9f3dd1da54bb 100644 --- a/lib/manager/gradle/gradle-updates-report.ts +++ b/lib/manager/gradle/gradle-updates-report.ts @@ -1,7 +1,7 @@ import { join } from 'path'; import { exists, readFile, writeFile } from 'fs-extra'; import { logger } from '../../logger'; -import { DATASOURCE_SBT } from '../../constants/data-binary-source'; +import { DATASOURCE_SBT_PACKAGE } from '../../constants/data-binary-source'; export const GRADLE_DEPENDENCY_REPORT_FILENAME = 'gradle-renovate-report.json'; @@ -160,7 +160,7 @@ export async function extractDependenciesFromUpdatesReport( return { ...dep, depName: depName.replace(/_%%/, ''), - datasource: DATASOURCE_SBT, + datasource: DATASOURCE_SBT_PACKAGE, }; } if (/^%.*%$/.test(currentValue)) { diff --git a/lib/manager/sbt/__snapshots__/extract.spec.ts.snap b/lib/manager/sbt/__snapshots__/extract.spec.ts.snap index 77e5bb6c507e172ebbf190eb83093c45dc653c73..326c6717099702a2cda89892742eab88db426970 100644 --- a/lib/manager/sbt/__snapshots__/extract.spec.ts.snap +++ b/lib/manager/sbt/__snapshots__/extract.spec.ts.snap @@ -5,7 +5,7 @@ Object { "deps": Array [ Object { "currentValue": "0.7.1", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "com.example:foo_2.13.0-RC5", "fileReplacePosition": 168, "registryUrls": Array [ @@ -14,7 +14,7 @@ Object { }, Object { "currentValue": "1.2.3", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "com.abc:abc", "fileReplacePosition": 120, "registryUrls": Array [ @@ -30,7 +30,7 @@ Object { "deps": Array [ Object { "currentValue": "0.0.1", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:foo", "fileReplacePosition": 132, "registryUrls": Array [ @@ -44,7 +44,7 @@ Object { }, Object { "currentValue": "0.0.2", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:bar_2.9.10", "fileReplacePosition": 188, "registryUrls": Array [ @@ -58,7 +58,7 @@ Object { }, Object { "currentValue": "0.0.3", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:baz_2.9.10", "fileReplacePosition": 252, "registryUrls": Array [ @@ -72,7 +72,7 @@ Object { }, Object { "currentValue": "0.0.4", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:qux", "fileReplacePosition": 287, "registryUrls": Array [ @@ -86,7 +86,7 @@ Object { }, Object { "currentValue": "0.0.5", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:quux", "fileReplacePosition": 346, "registryUrls": Array [ @@ -100,7 +100,7 @@ Object { }, Object { "currentValue": "0.0.6", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:quuz_2.9.10", "depType": "test", "fileReplacePosition": 526, @@ -115,7 +115,7 @@ Object { }, Object { "currentValue": "0.0.7", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:corge", "depType": "Provided", "fileReplacePosition": 584, @@ -130,7 +130,7 @@ Object { }, Object { "currentValue": "0.0.8", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:grault", "depType": "Test", "fileReplacePosition": 479, @@ -145,7 +145,7 @@ Object { }, Object { "currentValue": "0.0.9", - "datasource": "sbt", + "datasource": "sbt-plugin", "depName": "org.example:waldo", "depType": "plugin", "fileReplacePosition": 986, @@ -167,7 +167,7 @@ Object { "deps": Array [ Object { "currentValue": "0.0.1", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:foo", "fileReplacePosition": 195, "registryUrls": Array [ @@ -181,7 +181,7 @@ Object { }, Object { "currentValue": "0.0.2", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:bar_2.12", "fileReplacePosition": 251, "registryUrls": Array [ @@ -195,7 +195,7 @@ Object { }, Object { "currentValue": "0.0.3", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:baz_2.12", "fileReplacePosition": 315, "registryUrls": Array [ @@ -209,7 +209,7 @@ Object { }, Object { "currentValue": "0.0.4", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:qux", "fileReplacePosition": 350, "registryUrls": Array [ @@ -223,7 +223,7 @@ Object { }, Object { "currentValue": "0.0.5", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:quux", "fileReplacePosition": 409, "registryUrls": Array [ @@ -237,7 +237,7 @@ Object { }, Object { "currentValue": "0.0.6", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:quuz_2.12", "depType": "test", "fileReplacePosition": 553, @@ -252,7 +252,7 @@ Object { }, Object { "currentValue": "0.0.7", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:corge", "depType": "Provided", "fileReplacePosition": 611, @@ -267,7 +267,7 @@ Object { }, Object { "currentValue": "0.0.8", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.example:grault", "depType": "Test", "fileReplacePosition": 51, @@ -282,7 +282,7 @@ Object { }, Object { "currentValue": "0.0.9", - "datasource": "sbt", + "datasource": "sbt-plugin", "depName": "org.example:waldo", "depType": "plugin", "fileReplacePosition": 1013, @@ -304,7 +304,7 @@ Object { "deps": Array [ Object { "currentValue": "3.0.0", - "datasource": "sbt", + "datasource": "sbt-package", "depName": "org.scalatest:scalatest", "fileReplacePosition": 65, "registryUrls": Array [ @@ -313,7 +313,7 @@ Object { }, Object { "currentValue": "1.0.11", - "datasource": "sbt", + "datasource": "sbt-plugin", "depName": "com.github.gseitz:sbt-release", "depType": "plugin", "fileReplacePosition": 100, diff --git a/lib/manager/sbt/extract.ts b/lib/manager/sbt/extract.ts index 81012dfd7fcfa94a290ec6650c442f09a6a8d8f0..55972aaa2053a3da01c6e9f100f0ecdb0e142c6d 100644 --- a/lib/manager/sbt/extract.ts +++ b/lib/manager/sbt/extract.ts @@ -2,7 +2,10 @@ import { DEFAULT_MAVEN_REPO } from '../maven/extract'; import { PackageFile, PackageDependency } from '../common'; import { get } from '../../versioning'; import * as mavenVersioning from '../../versioning/maven'; -import { DATASOURCE_SBT } from '../../constants/data-binary-source'; +import { + DATASOURCE_SBT_PACKAGE, + DATASOURCE_SBT_PLUGIN, +} from '../../constants/data-binary-source'; const isComment = (str: string): boolean => /^\s*\/\//.test(str); @@ -250,12 +253,17 @@ function parseSbtLine( } } - if (dep) + if (dep) { + if (dep.depType === 'plugin') { + dep.datasource = DATASOURCE_SBT_PLUGIN; + } else { + dep.datasource = DATASOURCE_SBT_PACKAGE; + } deps.push({ - datasource: DATASOURCE_SBT, registryUrls, ...dep, }); + } if (lineIndex + 1 < lines.length) return {