fix(docker): bump docker max api version [BE-12399] (#1392)

This commit is contained in:
Devon Steenberg
2025-11-18 11:27:16 +13:00
committed by GitHub
parent 99d996dde9
commit e831971dd1
73 changed files with 82 additions and 86 deletions
+1 -1
View File
@@ -111,7 +111,7 @@ var prefixProxyFuncMap = map[string]func(*Transport, *http.Request, string) (*ht
// ProxyDockerRequest intercepts a Docker API request and apply logic based
// on the requested operation.
func (transport *Transport) ProxyDockerRequest(request *http.Request) (*http.Response, error) {
// from : /v1.41/containers/{id}/json
// from : /v1.44/containers/{id}/json
// or : /containers/{id}/json
// to : /containers/{id}/json
unversionedPath := apiVersionRe.ReplaceAllString(request.URL.Path, "")
+1 -1
View File
@@ -1,4 +1,4 @@
import { NodeStatus, TaskState } from 'docker-types/generated/1.41';
import { NodeStatus, TaskState } from 'docker-types/generated/1.44';
import _ from 'lodash';
export function trimVersionTag(fullName: string) {
+1 -1
View File
@@ -1,4 +1,4 @@
import { Config } from 'docker-types/generated/1.41';
import { Config } from 'docker-types/generated/1.44';
import { IResource } from '@/react/docker/components/datatable/createOwnershipColumn';
import { PortainerResponse } from '@/react/docker/types';
+1 -1
View File
@@ -1,4 +1,4 @@
import { ImageSummary } from 'docker-types/generated/1.41';
import { ImageSummary } from 'docker-types/generated/1.44';
import { PortainerResponse } from '@/react/docker/types';
+1 -1
View File
@@ -1,4 +1,4 @@
import { ImageInspect } from 'docker-types/generated/1.41';
import { ImageInspect } from 'docker-types/generated/1.44';
type ImageInspectConfig = NonNullable<ImageInspect['Config']>;
+1 -1
View File
@@ -1,4 +1,4 @@
import { IPAM, Network, NetworkContainer } from 'docker-types/generated/1.41';
import { IPAM, Network, NetworkContainer } from 'docker-types/generated/1.44';
import { ResourceControlViewModel } from '@/react/portainer/access-control/models/ResourceControlViewModel';
import { IResource } from '@/react/docker/components/datatable/createOwnershipColumn';
+1 -1
View File
@@ -8,7 +8,7 @@ import {
ObjectVersion,
Platform,
ResourceObject,
} from 'docker-types/generated/1.41';
} from 'docker-types/generated/1.44';
export class NodeViewModel {
Model: Node;
+1 -1
View File
@@ -1,4 +1,4 @@
import { Secret } from 'docker-types/generated/1.41';
import { Secret } from 'docker-types/generated/1.44';
import { ResourceControlViewModel } from '@/react/portainer/access-control/models/ResourceControlViewModel';
import { PortainerResponse } from '@/react/docker/types';
+1 -1
View File
@@ -6,7 +6,7 @@ import {
Service,
ServiceSpec,
TaskSpec,
} from 'docker-types/generated/1.41';
} from 'docker-types/generated/1.44';
import { ResourceControlViewModel } from '@/react/portainer/access-control/models/ResourceControlViewModel';
import { PortainerResponse } from '@/react/docker/types';
+1 -1
View File
@@ -1,4 +1,4 @@
import { Task } from 'docker-types/generated/1.41';
import { Task } from 'docker-types/generated/1.44';
import { DeepPick } from '@/types/deepPick';
+1 -1
View File
@@ -1,4 +1,4 @@
import { Volume } from 'docker-types/generated/1.41';
import { Volume } from 'docker-types/generated/1.44';
import { ResourceControlViewModel } from '@/react/portainer/access-control/models/ResourceControlViewModel';
import { IResource } from '@/react/docker/components/datatable/createOwnershipColumn';
@@ -4,8 +4,4 @@ export const MaxDockerAPIVersionKey = 'maxDockerAPIVersion' as const;
export type DockerAPIVersionType = number;
// this is the version we are using with the generated API types
export const MAX_DOCKER_API_VERSION: DockerAPIVersionType = 1.41;
// https://docs.docker.com/engine/api/#api-version-matrix
// Docker 26 = API 1.45
export const LATEST_DOCKER_API_VERSION: DockerAPIVersionType = 1.45;
export const MAX_DOCKER_API_VERSION: DockerAPIVersionType = 1.44;
@@ -1,4 +1,4 @@
import { SystemVersion } from 'docker-types/generated/1.41';
import { SystemVersion } from 'docker-types/generated/1.44';
import Axios, { InternalAxiosRequestConfig } from 'axios';
import { setupCache, buildMemoryStorage } from 'axios-cache-interceptor';
@@ -1,4 +1,4 @@
import { Config } from 'docker-types/generated/1.41';
import { Config } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { Config } from 'docker-types/generated/1.41';
import { Config } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { ConfigSpec } from 'docker-types/generated/1.41';
import { ConfigSpec } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { PortMap } from 'docker-types/generated/1.41';
import { PortMap } from 'docker-types/generated/1.44';
import _ from 'lodash';
import { PortMapping, Protocol, Values } from './PortsMappingField';
@@ -1,4 +1,4 @@
import { PortMap } from 'docker-types/generated/1.41';
import { PortMap } from 'docker-types/generated/1.44';
import _ from 'lodash';
import { Protocol, Values } from './PortsMappingField';
@@ -1,6 +1,6 @@
import { ReactNode } from 'react';
import { mixed } from 'yup';
import { ContainerConfig } from 'docker-types/generated/1.41';
import { ContainerConfig } from 'docker-types/generated/1.44';
import { AutomationTestingProps } from '@/types';
@@ -1,4 +1,4 @@
import { HostConfig } from 'docker-types/generated/1.41';
import { HostConfig } from 'docker-types/generated/1.44';
import { commandArrayToString } from '@/docker/helpers/containers';
@@ -1,6 +1,6 @@
import { FormikErrors } from 'formik';
import { array, object, SchemaOf, string } from 'yup';
import { DeviceMapping } from 'docker-types/generated/1.41';
import { DeviceMapping } from 'docker-types/generated/1.44';
import { FormError } from '@@/form-components/FormError';
import { InputList, ItemProps } from '@@/form-components/InputList';
@@ -1,4 +1,4 @@
import { DeviceRequest } from 'docker-types/generated/1.41';
import { DeviceRequest } from 'docker-types/generated/1.44';
import { Values } from './types';
@@ -1,4 +1,4 @@
import { DeviceRequest } from 'docker-types/generated/1.41';
import { DeviceRequest } from 'docker-types/generated/1.44';
import { Values } from './types';
@@ -2,7 +2,7 @@ import {
ContainerConfig,
HostConfig,
NetworkingConfig,
} from 'docker-types/generated/1.41';
} from 'docker-types/generated/1.44';
export interface CreateContainerRequest extends ContainerConfig {
HostConfig: HostConfig;
@@ -1,6 +1,6 @@
import { useMemo } from 'react';
import { Network } from 'lucide-react';
import { EndpointSettings, NetworkSettings } from 'docker-types/generated/1.41';
import { EndpointSettings, NetworkSettings } from 'docker-types/generated/1.44';
import { createPersistedStore } from '@@/datatables/types';
import { useTableState } from '@@/datatables/useTableState';
@@ -1,5 +1,5 @@
import { TableMeta } from '@tanstack/react-table';
import { EndpointSettings } from 'docker-types/generated/1.41';
import { EndpointSettings } from 'docker-types/generated/1.44';
export type TableNetwork = EndpointSettings & { id: string; name: string };
@@ -6,7 +6,7 @@ import {
HostConfig,
MountPoint,
NetworkSettings,
} from 'docker-types/generated/1.41';
} from 'docker-types/generated/1.44';
import { PortainerResponse } from '@/react/docker/types';
import axios, { parseAxiosError } from '@/portainer/services/axios';
@@ -1,4 +1,4 @@
import { Resources, RestartPolicy } from 'docker-types/generated/1.41';
import { Resources, RestartPolicy } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { ContainerSummary } from 'docker-types/generated/1.41';
import { ContainerSummary } from 'docker-types/generated/1.44';
import { PortainerResponse } from '@/react/docker/types';
import { WithRequiredProperties } from '@/types';
+1 -1
View File
@@ -1,6 +1,6 @@
import { createColumnHelper } from '@tanstack/react-table';
import { Clock } from 'lucide-react';
import { EventMessage } from 'docker-types/generated/1.41';
import { EventMessage } from 'docker-types/generated/1.44';
import { isoDateFromTimestamp } from '@/portainer/filters/filters';
+1 -1
View File
@@ -1,4 +1,4 @@
import { EventMessage } from 'docker-types/generated/1.41';
import { EventMessage } from 'docker-types/generated/1.44';
type EventType = NonNullable<EventMessage['Type']>;
type Action = string;
+1 -1
View File
@@ -1,4 +1,4 @@
import { IPAMConfig } from 'docker-types/generated/1.41';
import { IPAMConfig } from 'docker-types/generated/1.44';
import { NetworkViewModel } from '@/docker/models/network';
@@ -1,4 +1,4 @@
import { EndpointSettings } from 'docker-types/generated/1.41';
import { EndpointSettings } from 'docker-types/generated/1.44';
import { useMutation, useQueryClient } from '@tanstack/react-query';
import axios, { parseAxiosError } from '@/portainer/services/axios';
@@ -1,4 +1,4 @@
import { Network } from 'docker-types/generated/1.41';
import { Network } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { ImageInspect } from 'docker-types/generated/1.41';
import { ImageInspect } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,5 +1,5 @@
import { useQuery } from '@tanstack/react-query';
import { ImageSummary } from 'docker-types/generated/1.41';
import { ImageSummary } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { Node } from 'docker-types/generated/1.41';
import { Node } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { Node } from 'docker-types/generated/1.41';
import { Node } from 'docker-types/generated/1.44';
import { useQuery } from '@tanstack/react-query';
import axios, { parseAxiosError } from '@/portainer/services/axios';
@@ -1,4 +1,4 @@
import { Node, NodeSpec } from 'docker-types/generated/1.41';
import { Node, NodeSpec } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { SecretSpec } from 'docker-types/generated/1.41';
import { SecretSpec } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { Secret } from 'docker-types/generated/1.41';
import { Secret } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { Secret } from 'docker-types/generated/1.41';
import { Secret } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { Task } from 'docker-types/generated/1.41';
import { Task } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
+1 -1
View File
@@ -1,4 +1,4 @@
import { EventMessage } from 'docker-types/generated/1.41';
import { EventMessage } from 'docker-types/generated/1.44';
import { useQuery } from '@tanstack/react-query';
import axios, {
+1 -1
View File
@@ -1,5 +1,5 @@
import { useQuery } from '@tanstack/react-query';
import { SystemInfo } from 'docker-types/generated/1.41';
import { SystemInfo } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
+2 -2
View File
@@ -3,7 +3,7 @@ import {
Plugin,
PluginInterfaceType,
PluginsInfo,
} from 'docker-types/generated/1.41';
} from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -87,7 +87,7 @@ export function aggregateData(
(plugin) =>
plugin.Enabled &&
// docker has an error in their types, so we need to cast to unknown first
// see https://docs.docker.com/engine/api/v1.41/#tag/Plugin/operation/PluginList
// see https://docs.docker.com/engine/api/v1.44/#tag/Plugin/operation/PluginList
plugin.Config.Interface.Types.includes(
pluginTypeToVersionMap[pluginType] as unknown as PluginInterfaceType
)
+1 -1
View File
@@ -1,5 +1,5 @@
import { useQuery } from '@tanstack/react-query';
import { Swarm } from 'docker-types/generated/1.41';
import { Swarm } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
+1 -1
View File
@@ -1,5 +1,5 @@
import { useQuery } from '@tanstack/react-query';
import { SystemVersion } from 'docker-types/generated/1.41';
import { SystemVersion } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { EndpointPortConfig } from 'docker-types/generated/1.41';
import { EndpointPortConfig } from 'docker-types/generated/1.44';
import _ from 'lodash';
import { Values } from './PortsMappingField';
@@ -1,4 +1,4 @@
import { EndpointPortConfig } from 'docker-types/generated/1.41';
import { EndpointPortConfig } from 'docker-types/generated/1.44';
import _ from 'lodash';
import { PortBinding, Protocol, Value, isProtocol, isRange } from './types';
@@ -1,4 +1,4 @@
import { Node } from 'docker-types/generated/1.41';
import { Node } from 'docker-types/generated/1.44';
import { CellContext } from '@tanstack/react-table';
import { useNodes } from '@/react/docker/proxy/queries/nodes/useNodes';
@@ -1,4 +1,4 @@
import { Node } from 'docker-types/generated/1.41';
import { Node } from 'docker-types/generated/1.44';
import { ServiceViewModel } from '@/docker/models/service';
@@ -1,5 +1,5 @@
import { CellContext } from '@tanstack/react-table';
import { Node } from 'docker-types/generated/1.41';
import { Node } from 'docker-types/generated/1.44';
import { ServiceViewModel } from '@/docker/models/service';
import { useNodes } from '@/react/docker/proxy/queries/nodes/useNodes';
@@ -1,4 +1,4 @@
import { Service } from 'docker-types/generated/1.41';
import { Service } from 'docker-types/generated/1.44';
import { ServiceUpdateConfig } from '../types';
@@ -1,4 +1,4 @@
import { Service } from 'docker-types/generated/1.41';
import { Service } from 'docker-types/generated/1.44';
import { useMutation, useQueryClient } from '@tanstack/react-query';
import axios, { parseAxiosError } from '@/portainer/services/axios';
@@ -1,5 +1,5 @@
import { useQuery } from '@tanstack/react-query';
import { Service } from 'docker-types/generated/1.41';
import { Service } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { withGlobalError } from '@/react-tools/react-query';
@@ -1,5 +1,5 @@
import { useQuery } from '@tanstack/react-query';
import { Service } from 'docker-types/generated/1.41';
import { Service } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { withGlobalError } from '@/react-tools/react-query';
@@ -1,4 +1,4 @@
import { ServiceUpdateResponse } from 'docker-types/generated/1.41';
import { ServiceUpdateResponse } from 'docker-types/generated/1.44';
import { useMutation, useQueryClient } from '@tanstack/react-query';
import axios, { parseAxiosError } from '@/portainer/services/axios';
+1 -1
View File
@@ -1,4 +1,4 @@
import { ServiceSpec, TaskSpec } from 'docker-types/generated/1.41';
import { ServiceSpec, TaskSpec } from 'docker-types/generated/1.44';
export type ServiceId = string;
@@ -126,7 +126,7 @@ describe('initial loading', () => {
http.get('/api/endpoints/:id/docker/version', () => {
versionFetched = true;
return HttpResponse.json({
ApiVersion: '1.41',
ApiVersion: '1.44',
});
})
);
@@ -417,7 +417,7 @@ function setupMswHandlers({
shouldReturnEnv = true,
shouldReturnSchema = true,
envType = EnvironmentType.Docker,
apiVersion = 1.41,
apiVersion = 1.44,
schema = { type: 'object', properties: {} },
stackUpdateResponse,
}: {
@@ -38,7 +38,7 @@ vi.mock('@uirouter/react', async (importOriginal: () => Promise<object>) => ({
const defaultProps = {
stackType: StackType.DockerCompose,
composeSyntaxMaxVersion: 3,
apiVersion: 1.41,
apiVersion: 1.44,
envType: EnvironmentType.Docker,
schema: { type: 'object' } as JSONSchema7,
isOrphaned: false,
@@ -155,7 +155,7 @@ describe('conditional rendering - Prune services field', () => {
it('should show Prune field for DockerCompose with API >= 1.27', async () => {
renderComponent({
stackType: StackType.DockerCompose,
apiVersion: 1.41,
apiVersion: 1.44,
});
await waitFor(() => {
@@ -184,7 +184,7 @@ describe('conditional rendering - Prune services field', () => {
it('should hide Prune field for Kubernetes stack', () => {
renderComponent({
stackType: StackType.Kubernetes,
apiVersion: 1.41,
apiVersion: 1.44,
});
expect(screen.queryByTestId('stack-prune-switch')).not.toBeInTheDocument();
@@ -274,7 +274,7 @@ describe('form field updates', () => {
renderComponent(
{
stackType: StackType.DockerSwarm,
apiVersion: 1.41,
apiVersion: 1.44,
},
{ onSubmit }
);
@@ -455,7 +455,7 @@ describe('authorization', () => {
renderComponent(
{
stackType: StackType.DockerSwarm,
apiVersion: 1.41,
apiVersion: 1.44,
},
{ user: unauthorizedUser }
);
+1 -1
View File
@@ -1,4 +1,4 @@
import { Task } from 'docker-types/generated/1.41';
import { Task } from 'docker-types/generated/1.44';
import { useQuery } from '@tanstack/react-query';
import axios, { parseAxiosError } from '@/portainer/services/axios';
+1 -1
View File
@@ -1,4 +1,4 @@
import { Task } from 'docker-types/generated/1.41';
import { Task } from 'docker-types/generated/1.44';
export type TaskId = NonNullable<Task['ID']>;
@@ -1,4 +1,4 @@
import { Volume, VolumeCreateOptions } from 'docker-types/generated/1.41';
import { Volume, VolumeCreateOptions } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { Volume } from 'docker-types/generated/1.41';
import { Volume } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,4 +1,4 @@
import { Volume } from 'docker-types/generated/1.41';
import { Volume } from 'docker-types/generated/1.44';
import { EnvironmentId } from '@/react/portainer/environments/types';
import axios, { parseAxiosError } from '@/portainer/services/axios';
@@ -1,4 +1,4 @@
import { Volume } from 'docker-types/generated/1.41';
import { Volume } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { EnvironmentId } from '@/react/portainer/environments/types';
@@ -1,5 +1,5 @@
import { useQuery } from '@tanstack/react-query';
import { Volume } from 'docker-types/generated/1.41';
import { Volume } from 'docker-types/generated/1.44';
import axios, { parseAxiosError } from '@/portainer/services/axios';
import { buildDockerProxyUrl } from '@/react/docker/proxy/queries/buildDockerProxyUrl';
@@ -1,4 +1,4 @@
import { RestartPolicy } from 'docker-types/generated/1.41';
import { RestartPolicy } from 'docker-types/generated/1.44';
import { BasicTableSettings } from '@@/datatables/types';
@@ -1,5 +1,5 @@
import _ from 'lodash';
import { RestartPolicy } from 'docker-types/generated/1.41';
import { RestartPolicy } from 'docker-types/generated/1.44';
import { PorImageRegistryModel } from 'Docker/models/porImageRegistry';
+1 -1
View File
@@ -1,5 +1,5 @@
import { http, HttpResponse } from 'msw';
import { SystemInfo, SystemVersion } from 'docker-types/generated/1.41';
import { SystemInfo, SystemVersion } from 'docker-types/generated/1.44';
export const dockerHandlers = [
http.get<never, never, SystemInfo>(
+1 -1
View File
@@ -92,7 +92,7 @@
"codemirror-json-schema": "^0.8.0",
"core-js": "^3.19.3",
"date-fns": "^2.29.3",
"docker-types": "^1.43.1",
"docker-types": "^1.45.0",
"fast-json-patch": "^3.1.1",
"file-saver": "^2.0.5",
"filesize": "^10.1.6",
+4 -4
View File
@@ -9608,10 +9608,10 @@ dns-packet@^5.2.2:
dependencies:
"@leichtgewicht/ip-codec" "^2.0.1"
docker-types@^1.43.1:
version "1.43.1"
resolved "https://registry.yarnpkg.com/docker-types/-/docker-types-1.43.1.tgz#3f1a644e29c85392e95c207bba15f16b675dca2a"
integrity sha512-eiihBU5LvZlNaeh/hGycsaoeutlPJ/0vyvEKvuBWnyilCq+IRWnv9e2+oh6AIpXEuHiWFowwHXmIlKlt07X3Mw==
docker-types@^1.45.0:
version "1.45.0"
resolved "https://registry.yarnpkg.com/docker-types/-/docker-types-1.45.0.tgz#57f9eeb283364128fa472d25abc75563160aea4f"
integrity sha512-IvVAmwGbXVSEsD+Ld3pwIhCSm4YbnlZ9dPHbDVkgZUcE22MSkuIARREc7ipQ9JoMOzu7qMPD8H/KCpGnrZRo7A==
doctrine@^2.1.0:
version "2.1.0"