first commit

This commit is contained in:
2025-04-04 08:46:42 +02:00
commit 11761f7a9b
9 changed files with 228 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.idea

27
action.yml Normal file
View File

@@ -0,0 +1,27 @@
name: Docker build push !
description: A custom docker build push
author: Skydust
# Define your inputs here.
inputs:
imageName:
description: The image name
required: true
imagePrefix:
description: The image prefix
required: false
default: ${{ gitea.server_url }}/${{ gitea.repository_owner }}/
runs:
using: composite
container:
image: cypress/base:22.13.1
steps:
- name: Tests
run: |
ls
ls /
ls /opt
- name: Install node packages
uses: https://gitea.skydust.fr/actions/install-node-packages@main

72
entrypoint.sh Normal file
View File

@@ -0,0 +1,72 @@
#!/usr/bin/env bash
INPUT_IMAGE_NAME=$imageName
INPUT_IMAGE_PREFIX=$imagePrefix
INPUT_PUSH_IMAGE=$push
INPUT_PULL_CACHE=$pullCache
INPUT_DOCKERFILE_PATH=$path
INPUT_PLATFORM=$platform
INPUT_EXPORT_TAR=$exportTarPath
INPUT_BUILD_ARGS=$buildArgs
set -e
# shellcheck disable=SC2155
export LOWERCASE_INPUT_IMAGE_PREFIX="$(echo "$INPUT_IMAGE_PREFIX" | tr '[:upper:]' '[:lower:]')"
IMAGE_NAME="$(echo "$LOWERCASE_INPUT_IMAGE_PREFIX" | sed 's/^https\?:\/\///')$INPUT_IMAGE_NAME"
if [ -n "$DOCKER_CONFIG_BASE64" ]; then
echo "Retrieving docker config"
mkdir "$HOME/.docker/"
echo "$DOCKER_CONFIG_BASE64" | base64 -d > "$HOME/.docker/config.json"
fi;
echo "Full image name: $IMAGE_NAME"
if [ -z "$INPUT_IMAGE_NAME" ]; then
echo "No image name given."
exit 1
fi;
DOCKER_BUILD_OPTIONS=("--progress" "plain" "-t" "$IMAGE_NAME")
if [[ -n "${INPUT_BUILD_ARGS}" ]]; then
IFS=',' read -ra allBuildArgs <<< "${INPUT_BUILD_ARGS}"
for dockerArg in "${allBuildArgs[@]}"; do
DOCKER_BUILD_OPTIONS+=("--build-arg" "$dockerArg")
done
fi
if [ -n "$INPUT_PLATFORM" ]; then
DOCKER_BUILD_OPTIONS+=("--platform" "$INPUT_PLATFORM" "--pull")
fi
if [ "$INPUT_PUSH_IMAGE" = "true" ]; then
DOCKER_BUILD_OPTIONS+=("--output=type=image,name=${IMAGE_NAME},push=true,compression=zstd,compression-level=8,force-compression=true,oci-mediatypes=true")
fi
if [ "$INPUT_PULL_CACHE" = "true" ]; then
IMAGE_CACHE_NAME="${IMAGE_NAME%%:*}:build-cache"
DOCKER_BUILD_OPTIONS+=("--cache-from" "type=registry,ref=${IMAGE_CACHE_NAME}")
DOCKER_BUILD_OPTIONS+=("--cache-to" "type=registry,image-manifest=true,oci-mediatypes=true,ref=${IMAGE_CACHE_NAME},mode=max")
echo "Using docker image cache ${IMAGE_CACHE_NAME}"
fi
if [ -n "$INPUT_EXPORT_TAR" ]; then
DOCKER_BUILD_OPTIONS+=("--output" "type=docker,dest=$INPUT_EXPORT_TAR")
fi
DOCKER_BUILD_OPTIONS+=("--rm")
DOCKER_BUILD_OPTIONS+=("${INPUT_DOCKERFILE_PATH}")
# shellcheck disable=SC2145
echo "Running docker buildx with options: ${DOCKER_BUILD_OPTIONS[@]}"
echo "Building and pushing !"
docker buildx build "${DOCKER_BUILD_OPTIONS[@]}"
echo "Cleaning up docker"
docker system prune --all --force --filter label!=ACT_IMAGE=true
echo "imageName=${IMAGE_NAME}" >> "$GITEA_OUTPUT"
exit 0

View File

@@ -0,0 +1,18 @@
import { defineConfig } from "cypress";
import { initPlugin } from "cypress-plugin-snapshots/plugin";
export default defineConfig({
e2e: {
baseUrl: "http://127.0.0.1:5173/",
screenshotOnRunFailure: true, // Capture screenshots on test failure
setupNodeEvents(on, config) {
initPlugin(on, config);
return config;
},
excludeSpecPattern: [
"**/__snapshots__/*",
"**/__image_snapshots__/*"
]
},
screenshotsFolder: "cypress/screenshots"
});

View File

@@ -0,0 +1,33 @@
describe("full page screenshot", () => {
const takeFullPageScreenshots = () => {
cy.visit("/");
cy.wait(500);
cy.window().toMatchImageSnapshot("first", {
threshold: 0.8
});
cy.wait(400);
cy.window().toMatchImageSnapshot("second", {
threshold: 0.8
});
};
it("Normal screen", () => {
cy.viewport(1280, 720);
takeFullPageScreenshots();
});
it("Old puter screen", () => {
cy.viewport(800, 600);
takeFullPageScreenshots();
});
it("iPhone8", () => {
cy.viewport("iphone-8");
takeFullPageScreenshots();
});
it("iPad2", () => {
cy.viewport("ipad-2");
takeFullPageScreenshots();
});
});

View File

@@ -0,0 +1,51 @@
import "cypress-plugin-snapshots/commands";
declare global {
namespace Cypress {
interface MatchSnapshotOptions {
/** Custom name for the snapshot */
name?: string;
/** Save snapshot as JSON instead of plain text */
json?: boolean;
/** Timeout in milliseconds */
timeout?: number;
}
interface MatchImageSnapshotOptions {
/** Custom name for the image snapshot */
name?: string;
/** Mismatch threshold for considering images different */
threshold?: number;
/** Type of threshold comparison */
thresholdType?: "pixel" | "percent";
/** Direction of the difference detection */
diffDirection?: "horizontal" | "vertical";
/** Allow different image sizes */
allowSizeMismatch?: boolean;
/** Custom configuration for pixelmatch */
customDiffConfig?: Record<string, unknown>;
/** Path to custom snapshots directory */
customSnapshotsDir?: string;
/** Path to custom diffs directory */
customDiffDir?: string;
/** Capture mode */
capture?: "viewport" | "fullPage" | "runner";
}
interface Chainable {
/**
* Take a text-based snapshot and compare with a baseline
* @param name - Name of the snapshot (optional)
* @param options - Snapshot options
*/
toMatchSnapshot(name?: string, options?: MatchSnapshotOptions): Chainable;
/**
* Take an image snapshot and compare with a baseline
* @param name - Name of the snapshot (optional)
* @param options - Image snapshot options
*/
toMatchImageSnapshot(name?: string, options?: MatchImageSnapshotOptions): Chainable;
}
}
}

View File

@@ -0,0 +1 @@
import "./commands";

View File

@@ -0,0 +1,9 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["es5", "dom"],
"sourceMap": true,
"types": ["cypress", "node"]
},
"include": ["**/*.ts"]
}

16
files/e2e/package.json Normal file
View File

@@ -0,0 +1,16 @@
{
"name": "cypress-e2e",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"cy:open": "cypress open --e2e",
"cy:test": "cypress run --e2e -b firefox"
},
"devDependencies": {
"cypress": "^14.2.1",
"cypress-plugin-snapshots": "^1.4.4",
"typescript": "~5.8.0"
},
"packageManager": "pnpm@10.2.1+sha512.398035c7bd696d0ba0b10a688ed558285329d27ea994804a52bad9167d8e3a72bcb993f9699585d3ca25779ac64949ef422757a6c31102c12ab932e5cbe5cc92"
}