diff --git a/app/scripts/modules/core/src/pipeline/executions/ExecutionNotFound.tsx b/app/scripts/modules/core/src/pipeline/executions/ExecutionNotFound.tsx
new file mode 100644
index 00000000000..5a7e7f95df9
--- /dev/null
+++ b/app/scripts/modules/core/src/pipeline/executions/ExecutionNotFound.tsx
@@ -0,0 +1,18 @@
+import * as React from 'react';
+import { ReactInjector } from 'core/reactShims';
+
+export class ExecutionNotFound extends React.Component {
+ public render() {
+ const { params } = ReactInjector.$state;
+ return (
+
+
+
Execution Not Found
+
+ Please check your URL - we can't find any data for {params.executionId}.
+
+
+
+ );
+ }
+}
diff --git a/app/scripts/modules/core/src/pipeline/pipeline.states.ts b/app/scripts/modules/core/src/pipeline/pipeline.states.ts
index 56d7371094b..de974d63dcc 100644
--- a/app/scripts/modules/core/src/pipeline/pipeline.states.ts
+++ b/app/scripts/modules/core/src/pipeline/pipeline.states.ts
@@ -5,7 +5,9 @@ import { INestedState, StateConfigProvider } from 'core/navigation/state.provide
import { filterModelConfig } from './filter/ExecutionFilterModel';
import { Executions } from 'core/pipeline/executions/Executions';
+import { ExecutionNotFound } from 'core/pipeline/executions/ExecutionNotFound';
import { SingleExecutionDetails } from 'core/pipeline/details/SingleExecutionDetails';
+import { ExecutionService } from './service/execution.service';
export const PIPELINE_STATES = 'spinnaker.core.pipeline.states';
module(PIPELINE_STATES, [APPLICATION_STATE_PROVIDER]).config([
@@ -92,5 +94,39 @@ module(PIPELINE_STATES, [APPLICATION_STATE_PROVIDER]).config([
};
applicationStateProvider.addChildState(pipelines);
+
+ const executionsLookup: INestedState = {
+ name: 'executionLookup',
+ url: '/executions/:executionId',
+ params: {
+ executionId: { dynamic: true },
+ },
+ redirectTo: transition => {
+ const { executionId } = transition.params();
+ const executionService: ExecutionService = transition.injector().get('executionService');
+
+ if (!executionId) {
+ return undefined;
+ }
+
+ return Promise.resolve()
+ .then(() => executionService.getExecution(executionId))
+ .then(execution =>
+ transition.router.stateService.target(
+ 'home.applications.application.pipelines.executionDetails.execution',
+ {
+ application: execution.application,
+ executionId: execution.id,
+ },
+ ),
+ )
+ .catch(() => {});
+ },
+ views: {
+ 'main@': { component: ExecutionNotFound, $type: 'react' },
+ },
+ };
+
+ stateConfigProvider.addToRootState(executionsLookup);
},
]);