Make tests work again, use new CI flow
This commit is contained in:
parent
af7bebdc53
commit
ef69c37109
2
.gitignore
vendored
2
.gitignore
vendored
@ -59,3 +59,5 @@ reports/
|
|||||||
# virtualenv
|
# virtualenv
|
||||||
venv/
|
venv/
|
||||||
ENV/
|
ENV/
|
||||||
|
|
||||||
|
aws-lambda-rie
|
||||||
|
@ -37,7 +37,7 @@ RUN export MAKEFLAGS="-j$(nproc)" && \
|
|||||||
# Install our app
|
# Install our app
|
||||||
COPY app.py /app
|
COPY app.py /app
|
||||||
|
|
||||||
# Ser version to our TAG
|
# Set internal __version__ to our own container TAG
|
||||||
RUN sed -i -e "s/^__version__ =.*/__version__ = \"${TAG}\"/" /app/app.py
|
RUN sed -i -e "s/^__version__ =.*/__version__ = \"${TAG}\"/" /app/app.py
|
||||||
|
|
||||||
# Stage 3 - final runtime image
|
# Stage 3 - final runtime image
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
FROM setviacmdline:latest
|
|
||||||
|
|
||||||
# Install additional tools for tests
|
|
||||||
COPY dev-requirements.txt .flake8 .
|
|
||||||
RUN export MAKEFLAGS="-j$(nproc)" && \
|
|
||||||
pip install -r dev-requirements.txt
|
|
||||||
|
|
||||||
# Unit Tests / Static / Style etc.
|
|
||||||
COPY tests/ tests/
|
|
||||||
RUN flake8 app.py tests && \
|
|
||||||
codespell app.py tests
|
|
||||||
|
|
||||||
# Get aws-lambda run time emulator
|
|
||||||
ADD https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie /usr/local/bin/aws-lambda-rie
|
|
||||||
RUN chmod 0755 /usr/local/bin/aws-lambda-rie && \
|
|
||||||
mkdir -p tests
|
|
||||||
|
|
||||||
# Install pytest
|
|
||||||
RUN pip install pytest --target /app
|
|
||||||
|
|
||||||
# Add our tests
|
|
||||||
ADD tests /app/tests
|
|
||||||
|
|
||||||
# Run tests
|
|
||||||
ENTRYPOINT []
|
|
||||||
CMD /usr/local/bin/python -m pytest tests -c tests/pytest.ini --capture=tee-sys
|
|
18
Makefile
18
Makefile
@ -3,3 +3,21 @@ IMAGE := sns-alert-hub
|
|||||||
REGION := us-east-1
|
REGION := us-east-1
|
||||||
|
|
||||||
include .ci/podman.mk
|
include .ci/podman.mk
|
||||||
|
|
||||||
|
SOURCE := app.py tests/test_aws-lambda-rie.py
|
||||||
|
|
||||||
|
test:: aws-lambda-rie
|
||||||
|
./run_tests.sh "$(IMAGE):$(TAG)-$(_ARCH)"
|
||||||
|
|
||||||
|
fmt::
|
||||||
|
autopep8 -i -a $(SOURCE)
|
||||||
|
|
||||||
|
lint::
|
||||||
|
flake8 $(SOURCE)
|
||||||
|
codespell $(SOURCE)
|
||||||
|
|
||||||
|
clean::
|
||||||
|
rm -rf .pytest_cache __pycache__ aws-lambda-rie
|
||||||
|
|
||||||
|
aws-lambda-rie:
|
||||||
|
wget https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie && chmod 0755 aws-lambda-rie
|
||||||
|
3
app.py
3
app.py
@ -106,7 +106,8 @@ def handler(event, context):
|
|||||||
if "AlarmName" in msg:
|
if "AlarmName" in msg:
|
||||||
title = "AWS Cloudwatch Alarm"
|
title = "AWS Cloudwatch Alarm"
|
||||||
|
|
||||||
# Discard NewStateValue == OK && OldStateValue == INSUFFICIENT_DATA as these are triggered by installing new Alarms and only cause confusion
|
# Discard NewStateValue == OK && OldStateValue == INSUFFICIENT_DATA as
|
||||||
|
# these are triggered by installing new Alarms and only cause confusion
|
||||||
if msg["NewStateValue"] == "OK" and msg["OldStateValue"] == "INSUFFICIENT_DATA":
|
if msg["NewStateValue"] == "OK" and msg["OldStateValue"] == "INSUFFICIENT_DATA":
|
||||||
logger.info(
|
logger.info(
|
||||||
"Discarding Cloudwatch Metrics Alarm as state is OK and previous state was insufficient data, most likely new alarm being installed"
|
"Discarding Cloudwatch Metrics Alarm as state is OK and previous state was insufficient data, most likely new alarm being installed"
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
pytest
|
pytest
|
||||||
|
autopep8
|
||||||
flake8
|
flake8
|
||||||
codespell
|
codespell
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import boto3
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description='Implement basic public ECR lifecycle policy')
|
|
||||||
parser.add_argument('--repo', dest='repositoryName', action='store', required=True,
|
|
||||||
help='Name of the public ECR repository')
|
|
||||||
parser.add_argument('--keep', dest='keep', action='store', default=10, type=int,
|
|
||||||
help='number of tagged images to keep, default 10')
|
|
||||||
parser.add_argument('--dev', dest='delete_dev', action='store_true',
|
|
||||||
help='also delete in-development images only having tags like v0.1.1-commitNr-githash')
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
client = boto3.client('ecr-public', region_name='us-east-1')
|
|
||||||
|
|
||||||
images = client.describe_images(repositoryName=args.repositoryName)["imageDetails"]
|
|
||||||
|
|
||||||
untagged = []
|
|
||||||
kept = 0
|
|
||||||
|
|
||||||
# actual Image
|
|
||||||
# imageManifestMediaType: 'application/vnd.oci.image.manifest.v1+json'
|
|
||||||
# image Index
|
|
||||||
# imageManifestMediaType: 'application/vnd.oci.image.index.v1+json'
|
|
||||||
|
|
||||||
# Sort by date uploaded
|
|
||||||
for image in sorted(images, key=lambda d: d['imagePushedAt'], reverse=True):
|
|
||||||
# Remove all untagged
|
|
||||||
# if registry uses image index all actual images will be untagged anyways
|
|
||||||
if 'imageTags' not in image:
|
|
||||||
untagged.append({"imageDigest": image['imageDigest']})
|
|
||||||
#print("Delete untagged image {}".format(image["imageDigest"]))
|
|
||||||
continue
|
|
||||||
|
|
||||||
# check for dev tags
|
|
||||||
if args.delete_dev:
|
|
||||||
_delete=True
|
|
||||||
for tag in image["imageTags"]:
|
|
||||||
# Look for at least one tag NOT beign a SemVer dev tag
|
|
||||||
if "-" not in tag:
|
|
||||||
_delete=False
|
|
||||||
if _delete:
|
|
||||||
print("Deleting development image {}".format(image["imageTags"]))
|
|
||||||
untagged.append({"imageDigest": image['imageDigest']})
|
|
||||||
continue
|
|
||||||
|
|
||||||
if kept < args.keep:
|
|
||||||
kept=kept+1
|
|
||||||
print("Keeping tagged image {}".format(image["imageTags"]))
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
print("Deleting tagged image {}".format(image["imageTags"]))
|
|
||||||
untagged.append({"imageDigest": image['imageDigest']})
|
|
||||||
|
|
||||||
deleted_images = client.batch_delete_image(repositoryName=args.repositoryName, imageIds=untagged)
|
|
||||||
|
|
||||||
if deleted_images["imageIds"]:
|
|
||||||
print("Deleted images: {}".format(deleted_images["imageIds"]))
|
|
17
run_tests.sh
Executable file
17
run_tests.sh
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/sh -ex
|
||||||
|
|
||||||
|
IMAGE=$1
|
||||||
|
|
||||||
|
ctr=$(buildah from $IMAGE)
|
||||||
|
trap "buildah rm $ctr" EXIT
|
||||||
|
|
||||||
|
buildah copy $ctr dev-requirements.txt .flake8 .
|
||||||
|
buildah copy $ctr aws-lambda-rie
|
||||||
|
buildah copy $ctr tests/ tests/
|
||||||
|
|
||||||
|
buildah run $ctr pip install -r dev-requirements.txt --target .
|
||||||
|
|
||||||
|
buildah run $ctr python -m flake8 app.py
|
||||||
|
buildah run $ctr python -m codespell_lib app.py
|
||||||
|
|
||||||
|
buildah run $ctr python -m pytest tests -c tests/pytest.ini --capture=tee-sys
|
@ -18,7 +18,7 @@ class Test:
|
|||||||
@classmethod
|
@classmethod
|
||||||
def setup_class(cls):
|
def setup_class(cls):
|
||||||
cls.p = subprocess.Popen(
|
cls.p = subprocess.Popen(
|
||||||
"aws-lambda-rie python -m awslambdaric app.handler", shell=True
|
"./aws-lambda-rie python -m awslambdaric app.handler", shell=True
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
Loading…
Reference in New Issue
Block a user