diff --git a/.github/workflows/docker-image.yml b/.github/workflows/semantic-release.yml similarity index 79% rename from .github/workflows/docker-image.yml rename to .github/workflows/semantic-release.yml index 78f6ac7..a8de028 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/semantic-release.yml @@ -1,4 +1,4 @@ -name: Docker Image CI +name: CI on: push: @@ -23,7 +23,7 @@ jobs: - name: Build the Docker image run: docker build -t dustico/dusti-lock:${{ steps.semantic_release_info.outputs.git_tag }} . - + - name: Tag version run: | git config --local user.email "action@github.com" @@ -46,13 +46,3 @@ jobs: body: ${{ steps.semantic_release_info.outputs.notes }} draft: false prerelease: false - - - name: Docker login - env: - DOCKER_USER: ${{secrets.DOCKER_USER}} - DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}} - run: | - docker login -u $DOCKER_USER -p $DOCKER_PASSWORD - - - name: Docker push - run: docker push dustico/dusti-lock diff --git a/.gitignore b/.gitignore index b3cb0b6..3cc7914 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ dusti-lock -.idea \ No newline at end of file +.idea +tests \ No newline at end of file diff --git a/analysis/analysis.go b/analysis/analysis.go index 28f4a56..27b281f 100644 --- a/analysis/analysis.go +++ b/analysis/analysis.go @@ -89,6 +89,7 @@ func AnalyzeDirectoryRecursive(workingDir string, excludedDirectories map[string fileName := fileInfo.Name() if fileName == "package.json" { + fmt.Printf("scanning \"%v\"\n", path) result, err := AnalyzePackagesJsonFile(path) if result { hasAnyPackageAvailableForRegistration = true diff --git a/dependencies/dependencies.go b/dependencies/dependencies.go index 850eaf6..c161bb0 100644 --- a/dependencies/dependencies.go +++ b/dependencies/dependencies.go @@ -77,12 +77,12 @@ func ParsePackagesJsonFile(reader *bufio.Reader) ([]string, error) { return nil, err } - processPackageName := func(npmPackageName string) { + processPackageName := func(dict *map[string]interface{}, npmPackageName string) { if strings.HasPrefix(npmPackageName, "@") { return } - value, _ := (*t.Dependencies)[npmPackageName] + value, _ := (*dict)[npmPackageName] version := fmt.Sprintf("%v", value) version = strings.ToLower(version) @@ -99,13 +99,13 @@ func ParsePackagesJsonFile(reader *bufio.Reader) ([]string, error) { if t.Dependencies != nil { for npmPackageName := range *t.Dependencies { - processPackageName(npmPackageName) + processPackageName(t.Dependencies, npmPackageName) } } if t.DevDependencies != nil { for npmPackageName := range *t.DevDependencies { - processPackageName(npmPackageName) + processPackageName(t.DevDependencies, npmPackageName) } } diff --git a/registry/registry.go b/registry/registry.go index c51bac7..2b4715b 100644 --- a/registry/registry.go +++ b/registry/registry.go @@ -13,14 +13,42 @@ const userAgent = "dependency locker" const npmRegistryUrl = "https://registry.npmjs.org" const pypiRegistryUrl = "https://pypi.python.org/simple" +var cache map[string]bool + +func init() { + cache = map[string]bool{} +} + func IsPypiPackageAvailableForRegistration(packageName string) (bool, error) { url := fmt.Sprintf("%v/%v", pypiRegistryUrl, packageName) - return isPackageAvailableForRegistration(url) + + result, found := cache[url] + if found { + return result, nil + } + + result, err := isPackageAvailableForRegistration(url) + if err != nil { + cache[url] = result + } + + return result, err } func IsNpmPackageAvailableForRegistration(packageName string) (bool, error) { url := fmt.Sprintf("%v/%v", npmRegistryUrl, packageName) - return isPackageAvailableForRegistration(url) + + result, found := cache[url] + if found { + return result, nil + } + + result, err := isPackageAvailableForRegistration(url) + if err != nil { + cache[url] = result + } + + return result, err } func isPackageAvailableForRegistration(url string) (bool, error) {