Skip to content

Commit

Permalink
feat: Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
AshCorr committed Nov 1, 2024
0 parents commit e8b5d7b
Show file tree
Hide file tree
Showing 11 changed files with 7,590 additions and 0 deletions.
85 changes: 85 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: Publish Action and Container

on:
push:
branches:
- main

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
build:
runs-on: ubuntu-latest
permissions:
# Write required to create a release
contents: write
# Write required to publish container to GHCR
packages: write
# Create attestations for published container
attestations: write
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v2

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

# Extract the @guardian/cdk version from the package.json to create a release
# matching the version.
- run: echo "CDK_VERSION=$(jq -rc .dependencies.\"@guardian/cdk\" < package.json)" >> $GITHUB_ENV

# Abort if release exists already
- name: Check if release exists
env:
GH_TOKEN: ${{ github.token }}
run: |
if gh release view v${{ env.CDK_VERSION }}; then
echo "Release v${{ env.CDK_VERSION }} already exists"
exit 1
fi
- name: Create draft release
env:
GH_TOKEN: ${{ github.token }}
run: gh release create v${{ env.CDK_VERSION }} --draft --generate-notes

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=semver,pattern={{version}},value=${{ env.CDK_VERSION}}
type=semver,pattern={{major}}.{{minor}},value=${{ env.CDK_VERSION}}
type=semver,pattern={{major}},value=${{ env.CDK_VERSION}}
- name: Log in to the Container registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push Docker image
id: push
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: ./container
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

- name: Generate artifact attestation
uses: actions/attest-build-provenance@v1
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true

- name: Publish draft release
env:
GH_TOKEN: ${{ github.token }}
run: gh release edit v${{ env.CDK_VERSION }} --draft=false
175 changes: 175 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore

# Logs

logs
_.log
npm-debug.log_
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

# Caches

.cache

# Diagnostic reports (https://nodejs.org/api/report.html)

report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json

# Runtime data

pids
_.pid
_.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover

lib-cov

# Coverage directory used by tools like istanbul

coverage
*.lcov

# nyc test coverage

.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)

.grunt

# Bower dependency directory (https://bower.io/)

bower_components

# node-waf configuration

.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)

build/Release

# Dependency directories

node_modules/
jspm_packages/

# Snowpack dependency directory (https://snowpack.dev/)

web_modules/

# TypeScript cache

*.tsbuildinfo

# Optional npm cache directory

.npm

# Optional eslint cache

.eslintcache

# Optional stylelint cache

.stylelintcache

# Microbundle cache

.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history

.node_repl_history

# Output of 'npm pack'

*.tgz

# Yarn Integrity file

.yarn-integrity

# dotenv environment variable files

.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# parcel-bundler cache (https://parceljs.org/)

.parcel-cache

# Next.js build output

.next
out

# Nuxt.js build / generate output

.nuxt
dist

# Gatsby files

# Comment in the public line in if your project uses Gatsby and not Next.js

# https://nextjs.org/blog/next-9-1#public-directory-support

# public

# vuepress build output

.vuepress/dist

# vuepress v2.x temp and cache directory

.temp

# Docusaurus cache and generated files

.docusaurus

# Serverless directories

.serverless/

# FuseBox cache

.fusebox/

# DynamoDB Local files

.dynamodb/

# TernJS port file

.tern-port

# Stores VSCode versions used for testing VSCode extensions

.vscode-test

# yarn v2

.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*

# IntelliJ based IDEs
.idea

# Finder (MacOS) folder config
.DS_Store
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# action-cdk

An experimental action to reduce the boilerplate of CDK projects by bundling required config in a container.

16 changes: 16 additions & 0 deletions action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Run CDK commands
description: Run CDK to Lint, Test, and Synth the CDK app
inputs:
commands:
description: 'The commands to run'
default: 'lint test synth'
type: string
runs:
using: composite
steps:
- name: Run CDK Container
env:
IMAGE_VERSION: ${{github.action_ref}}
shell: bash
run: echo ${{env.IMAGE_VERSION}}

14 changes: 14 additions & 0 deletions container/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM node:23-alpine

# Install Dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install --frozen-lockfile

# Copy CDK files
COPY cdk.ts ./
COPY cdk.json ./
COPY tsconfig.json ./
COPY jest.setup.js ./

ENTRYPOINT [ "npm", "run" ]
7 changes: 7 additions & 0 deletions container/cdk.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"app": "npx ts-node bin/cdk.ts",
"context": {
"aws-cdk:enableDiffNoFail": "true",
"@aws-cdk/core:stackRelativeExports": "true"
}
}
1 change: 1 addition & 0 deletions container/cdk.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
throw new Error("A cdk.ts file must be mounted to the container.");
1 change: 1 addition & 0 deletions container/jest.setup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
jest.mock("@guardian/cdk/lib/constants/tracking-tag");
Loading

0 comments on commit e8b5d7b

Please sign in to comment.