-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refactor git-push-service action #1767
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
This file was deleted.
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,8 +1,8 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { promises as fs } from 'fs' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import * as core from '@actions/core' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import * as fs from 'fs/promises' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import * as io from '@actions/io' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import * as path from 'path' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { Application, generateApplicationManifest } from './application.js' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
import * as yaml from 'js-yaml' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
type Inputs = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
workspace: string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -13,48 +13,71 @@ type Inputs = { | |||||||||||||||||||||||||||||||||||||||||||||||||||||
branch: string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
applicationAnnotations: string[] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
destinationRepository: string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
currentRef: string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
currentSha: string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
export const arrangeManifests = async (inputs: Inputs): Promise<void> => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
return await arrangeServiceManifests(inputs) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
export const writeManifests = async (inputs: Inputs): Promise<void> => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await writeServiceManifest(inputs.manifests, `${inputs.workspace}/services/${inputs.service}/generated.yaml`) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await writeApplicationManifest(inputs) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
const arrangeServiceManifests = async (inputs: Inputs): Promise<void> => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
core.info(`arrange the manifests of the service`) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await concatServiceManifests(inputs.manifests, `${inputs.workspace}/services/${inputs.service}/generated.yaml`) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const writeServiceManifest = async (sourcePaths: string[], destinationPath: string) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const sourceContents = await Promise.all( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
sourcePaths.map(async (manifestPath) => await fs.readFile(manifestPath, 'utf-8')), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const concatManifest = sourceContents.join('\n---\n') | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
core.info(`Writing the service manifest to ${destinationPath}`) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await io.mkdirP(path.dirname(destinationPath)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await fs.writeFile(destinationPath, concatManifest) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
await putApplicationManifest( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const writeApplicationManifest = async (inputs: Inputs) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const application = { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
apiVersion: 'argoproj.io/v1alpha1', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
kind: 'Application', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
metadata: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
name: `${inputs.namespace}--${inputs.service}`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
namespace: 'argocd', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
finalizers: ['resources-finalizer.argocd.argoproj.io'], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
annotations: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
...parseApplicationAnnotations(inputs.applicationAnnotations), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
'github.ref': inputs.currentRef, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
'github.sha': inputs.currentSha, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
'github.action': 'git-push-service', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+43
to
+48
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Moved from: monorepo-deploy-actions/git-push-service/src/run.ts Lines 71 to 76 in 05ab919
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
spec: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
project: inputs.project, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
source: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
repository: inputs.destinationRepository, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
branch: inputs.branch, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
repoURL: `https://github.com/${inputs.destinationRepository}.git`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
targetRevision: inputs.branch, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
path: `services/${inputs.service}`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
destination: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
server: `https://kubernetes.default.svc`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
namespace: inputs.namespace, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
annotations: inputs.applicationAnnotations, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
syncPolicy: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
automated: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
prune: true, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
inputs.workspace, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+36
to
+67
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Moved from: monorepo-deploy-actions/git-push-service/src/application.ts Lines 46 to 71 in 05ab919
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
const concatServiceManifests = async (manifestPaths: string[], destinationPath: string) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const manifestContents = await Promise.all( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
manifestPaths.map(async (manifestPath) => (await fs.readFile(manifestPath)).toString()), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const concatManifest = manifestContents.join('\n---\n') | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
core.info(`writing to ${destinationPath}`) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await io.mkdirP(path.dirname(destinationPath)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await fs.writeFile(destinationPath, concatManifest) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await io.mkdirP(`${inputs.workspace}/applications`) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const destination = `${inputs.workspace}/applications/${application.metadata.name}.yaml` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
core.info(`Writing the application manifest to ${destination}`) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await fs.writeFile(destination, yaml.dump(application)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
const putApplicationManifest = async (application: Application, workspace: string) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await io.mkdirP(`${workspace}/applications`) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const destination = `${workspace}/applications/${application.name}.yaml` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
core.info(`writing to ${destination}`) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const content = generateApplicationManifest(application) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
await fs.writeFile(destination, content) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const parseApplicationAnnotations = (applicationAnnotations: string[]): Record<string, string> => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const r: Record<string, string> = {} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Moved from: monorepo-deploy-actions/git-push-service/src/application.ts Lines 72 to 80 in 05ab919
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
for (const s of applicationAnnotations) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const k = s.substring(0, s.indexOf('=')) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
const v = s.substring(s.indexOf('=') + 1) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
r[k] = v | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
return r | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rename the functions to
write
prefix.