diff --git a/.changeset/dirty-clocks-play.md b/.changeset/dirty-clocks-play.md new file mode 100644 index 00000000..3275740c --- /dev/null +++ b/.changeset/dirty-clocks-play.md @@ -0,0 +1,8 @@ +--- +'arui-scripts': minor +--- + +Исправлен порядок инструкций в Dockerfile-шаблоне команды `docker-build`: шаг удаления npm +(`deleteNpm: true`) выполнялся после переключения на непривилегированного пользователя +(`runFromNonRootUser: true`) и падал с ошибкой прав доступа. Теперь npm удаляется до инструкции `USER nginx` — так же, как это уже было +сделано в шаблоне для `docker-build-compiled` diff --git a/packages/arui-scripts/src/templates/__tests__/dockerfile-templates.tests.ts b/packages/arui-scripts/src/templates/__tests__/dockerfile-templates.tests.ts index 7ac8e8f8..78a228c4 100644 --- a/packages/arui-scripts/src/templates/__tests__/dockerfile-templates.tests.ts +++ b/packages/arui-scripts/src/templates/__tests__/dockerfile-templates.tests.ts @@ -1,12 +1,12 @@ describe('dockerfile.template (normal mode)', () => { - function getTemplate(deleteNpm: boolean) { + function getTemplate(deleteNpm: boolean, runFromNonRootUser = false) { jest.resetModules(); jest.doMock('../../configs/app-configs', () => ({ configs: { baseDockerImage: 'test-image', clientOnly: false, nginx: null, - runFromNonRootUser: false, + runFromNonRootUser, buildPath: '.build', overridesPath: [], deleteNpm, @@ -30,6 +30,16 @@ describe('dockerfile.template (normal mode)', () => { expect(template).not.toContain('rm -rf /usr/local/bin/npm'); }); + + it('should place the removal step before USER nginx when runFromNonRootUser is enabled', () => { + const template = getTemplate(true, true); + const rmStep = template.indexOf('rm -rf /usr/local/bin/npm'); + const userNginx = template.indexOf('USER nginx'); + + expect(rmStep).toBeGreaterThan(-1); + expect(userNginx).toBeGreaterThan(-1); + expect(rmStep).toBeLessThan(userNginx); + }); }); describe('dockerfile-compiled.template (compiled mode)', () => { diff --git a/packages/arui-scripts/src/templates/dockerfile.template.ts b/packages/arui-scripts/src/templates/dockerfile.template.ts index a8e2d67e..2cdbfe69 100644 --- a/packages/arui-scripts/src/templates/dockerfile.template.ts +++ b/packages/arui-scripts/src/templates/dockerfile.template.ts @@ -32,6 +32,12 @@ ADD $START_SH_LOCATION /src/start.sh ADD $NGINX_CONF_LOCATION ${nginxConfTargetLocation} ${nginx ? 'ADD $NGINX_BASE_CONF_LOCATION /etc/nginx/nginx.conf' : ''} +${ + configs.deleteNpm + ? 'RUN rm -rf /usr/local/bin/npm /usr/local/bin/npx /usr/local/lib/node_modules/npm' + : '' +} + ${nginxNonRootPart} ${ @@ -39,11 +45,6 @@ ${ ? `ADD --chown=nginx:nginx ${appPathToAdd} ${appTargetPath}` : `ADD ${appPathToAdd} ${appTargetPath}` } -${ - configs.deleteNpm - ? 'RUN rm -rf /usr/local/bin/npm /usr/local/bin/npx /usr/local/lib/node_modules/npm' - : '' -} ${configs.clientOnly ? 'COPY env-config.jso[n] /src/' : ''} ${configs.clientOnly ? 'CMD ["nginx"]' : ''} `; diff --git a/packages/create-arui-scripts-app/src/versions.ts b/packages/create-arui-scripts-app/src/versions.ts index 0b479f5a..e48a686f 100644 --- a/packages/create-arui-scripts-app/src/versions.ts +++ b/packages/create-arui-scripts-app/src/versions.ts @@ -1,4 +1,4 @@ /** Версия arui-scripts, которую scaffold кладёт в package.json нового проекта. * Генерируется скриптом scripts/sync-arui-scripts-version.js при сборке. */ -export const DEFAULT_ARUI_SCRIPTS_VERSION = '23.5.1'; +export const DEFAULT_ARUI_SCRIPTS_VERSION = '23.6.0';