Skip to content
Snippets Groups Projects
Select Git revision
  • ddfbed0d8916324ddef5dfcc618f05751715a3e0
  • main default protected
  • dependabot/go_modules/github.com/prometheus/client_golang-1.23.0
  • automated-updates-main
  • release-0.14
  • 14-env
  • fix-version-3
  • automated-updates-fix-action
  • release-0.15
  • release-0.13
  • automated-updates-release-0.13
  • release-0.10
  • release-0.11
  • release-0.12
  • fix-versions-action
  • versions-fix
  • release-0.9
  • release-0.8
  • release-0.7
  • release-0.6
  • release-0.5
  • v0.15.0
  • v0.14.0
  • v0.13.0
  • v0.12.0
  • v0.11.0
  • v0.10.0
  • v0.9.0
  • v0.8.0
  • v0.7.0
  • v0.6.0
  • v0.5.0
  • v0.4.0
  • v0.3.0
  • v0.2.0
  • v0.1.0
36 results

using-custom-container-registry.md

Blame
  • buildpack.spec.ts 5.09 KiB
    import { mocked } from '../../../test/util';
    import { GlobalConfig } from '../../config/global';
    import * as _datasource from '../../modules/datasource';
    import {
      generateInstallCommands,
      isDynamicInstall,
      resolveConstraint,
    } from './buildpack';
    import type { ToolConstraint } from './types';
    
    jest.mock('../../modules/datasource');
    
    const datasource = mocked(_datasource);
    
    describe('util/exec/buildpack', () => {
      describe('isDynamicInstall()', () => {
        beforeEach(() => {
          GlobalConfig.reset();
          delete process.env.BUILDPACK;
        });
    
        it('returns false if binarySource is not install', () => {
          expect(isDynamicInstall()).toBeFalse();
        });
    
        it('returns false if not buildpack', () => {
          GlobalConfig.set({ binarySource: 'install' });
          expect(isDynamicInstall()).toBeFalse();
        });
    
        it('returns false if any unsupported tools', () => {
          GlobalConfig.set({ binarySource: 'install' });
          process.env.BUILDPACK = 'true';
          const toolConstraints: ToolConstraint[] = [
            { toolName: 'node' },
            { toolName: 'npm' },
          ];
          expect(isDynamicInstall(toolConstraints)).toBeFalse();
        });
    
        it('returns false if supported tools', () => {
          GlobalConfig.set({ binarySource: 'install' });
          process.env.BUILDPACK = 'true';
          const toolConstraints: ToolConstraint[] = [{ toolName: 'npm' }];
          expect(isDynamicInstall(toolConstraints)).toBeTrue();
        });
      });
    
      describe('resolveConstraint()', () => {
        beforeEach(() => {
          datasource.getPkgReleases.mockResolvedValue({
            releases: [
              { version: '1.0.0' },
              { version: '1.1.0' },
              { version: '1.3.0' },
              { version: '2.0.14' },
              { version: '2.1.0' },
              { version: '2.2.0-pre.0' },
            ],
          });
        });
    
        it('returns from config', async () => {
          expect(
            await resolveConstraint({ toolName: 'composer', constraint: '1.1.0' })
          ).toBe('1.1.0');
        });
    
        it('returns highest stable', async () => {
          expect(await resolveConstraint({ toolName: 'composer' })).toBe('2.1.0');
        });
    
        it('returns highest unstable', async () => {
          datasource.getPkgReleases.mockResolvedValue({
            releases: [{ version: '2.0.14-b.1' }, { version: '2.1.0-a.1' }],
          });
          expect(await resolveConstraint({ toolName: 'composer' })).toBe(
            '2.1.0-a.1'
          );
        });
    
        it('respects latest', async () => {
          datasource.getPkgReleases.mockResolvedValue({
            tags: {
              latest: '2.0.14',
            },
            releases: [
              { version: '1.0.0' },
              { version: '1.1.0' },
              { version: '1.3.0' },
              { version: '2.0.14' },
              { version: '2.1.0' },
              { version: '2.2.0-pre.0' },
            ],
          });
          expect(await resolveConstraint({ toolName: 'composer' })).toBe('2.0.14');
        });
    
        it('throws for unknown tools', async () => {
          datasource.getPkgReleases.mockReset();
          datasource.getPkgReleases.mockResolvedValueOnce({
            releases: [],
          });
          await expect(resolveConstraint({ toolName: 'whoops' })).rejects.toThrow(
            'Invalid tool to install: whoops'
          );
        });
    
        it('throws no releases', async () => {
          datasource.getPkgReleases.mockReset();
          datasource.getPkgReleases.mockResolvedValueOnce({
            releases: [],
          });
          await expect(resolveConstraint({ toolName: 'composer' })).rejects.toThrow(
            'No tool releases found.'
          );
        });
    
        it('falls back to latest version if no compatible release', async () => {
          datasource.getPkgReleases.mockReset();
          datasource.getPkgReleases.mockResolvedValueOnce({
            releases: [{ version: '1.2.3' }],
          });
          expect(
            await resolveConstraint({ toolName: 'composer', constraint: '^3.1.0' })
          ).toBe('1.2.3');
        });
    
        it('falls back to latest version if invalid constraint', async () => {
          datasource.getPkgReleases.mockReset();
          datasource.getPkgReleases.mockResolvedValueOnce({
            releases: [{ version: '1.2.3' }],
          });
          expect(
            await resolveConstraint({ toolName: 'composer', constraint: 'whoops' })
          ).toBe('1.2.3');
        });
      });
    
      describe('generateInstallCommands()', () => {
        beforeEach(() => {
          datasource.getPkgReleases.mockResolvedValueOnce({
            releases: [
              { version: '1.0.0' },
              { version: '1.1.0' },
              { version: '1.3.0' },
              { version: '2.0.14' },
              { version: '2.1.0' },
            ],
          });
        });
    
        it('returns install commands', async () => {
          const toolConstraints: ToolConstraint[] = [
            {
              toolName: 'composer',
            },
          ];
          expect(await generateInstallCommands(toolConstraints))
            .toMatchInlineSnapshot(`
            Array [
              "install-tool composer 2.1.0",
            ]
          `);
        });
    
        it('hashes npm', async () => {
          const toolConstraints: ToolConstraint[] = [{ toolName: 'npm' }];
          const res = await generateInstallCommands(toolConstraints);
          expect(res).toHaveLength(2);
          expect(res[1]).toBe('hash -d npm 2>/dev/null || true');
        });
      });
    });