initial commit
This commit is contained in:
commit
e3776c284a
123
.drone.yml
Normal file
123
.drone.yml
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: build-container
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: dryrun
|
||||||
|
image: plugins/docker
|
||||||
|
settings:
|
||||||
|
build_args:
|
||||||
|
- BUILD_VERSION=${DRONE_TAG%-*}
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
dry_run: true
|
||||||
|
password:
|
||||||
|
from_secret: docker_password
|
||||||
|
repo: xoxys/${DRONE_REPO_NAME}
|
||||||
|
username:
|
||||||
|
from_secret: docker_username
|
||||||
|
when:
|
||||||
|
ref:
|
||||||
|
- refs/pull/**
|
||||||
|
|
||||||
|
- name: tags
|
||||||
|
image: xoxys/docker-autotag
|
||||||
|
environment:
|
||||||
|
DOCKER_AUTOTAG_FORCE_LATEST: True
|
||||||
|
DOCKER_AUTOTAG_IGNORE_PRERELEASE: True
|
||||||
|
DOCKER_AUTOTAG_OUTPUT_FILE: .tags
|
||||||
|
DOCKER_AUTOTAG_VERSION: ${DRONE_TAG}
|
||||||
|
when:
|
||||||
|
ref:
|
||||||
|
- refs/heads/master
|
||||||
|
- refs/tags/**
|
||||||
|
|
||||||
|
- name: publish
|
||||||
|
image: plugins/docker
|
||||||
|
settings:
|
||||||
|
build_args:
|
||||||
|
- BUILD_VERSION=${DRONE_TAG%-*}
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
password:
|
||||||
|
from_secret: docker_password
|
||||||
|
repo: xoxys/${DRONE_REPO_NAME}
|
||||||
|
username:
|
||||||
|
from_secret: docker_username
|
||||||
|
when:
|
||||||
|
ref:
|
||||||
|
- refs/heads/master
|
||||||
|
- refs/tags/**
|
||||||
|
|
||||||
|
- name: publish-gitea
|
||||||
|
image: plugins/gitea-release
|
||||||
|
settings:
|
||||||
|
api_key:
|
||||||
|
from_secret: gitea_token
|
||||||
|
base_url: https://gitea.rknet.org
|
||||||
|
note: CHANGELOG.md
|
||||||
|
overwrite: true
|
||||||
|
title: ${DRONE_TAG}
|
||||||
|
when:
|
||||||
|
ref:
|
||||||
|
- refs/tags/**
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: notifications
|
||||||
|
|
||||||
|
platform:
|
||||||
|
os: linux
|
||||||
|
arch: amd64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: readme
|
||||||
|
image: sheogorath/readme-to-dockerhub
|
||||||
|
environment:
|
||||||
|
DOCKERHUB_PASSWORD:
|
||||||
|
from_secret: docker_password
|
||||||
|
DOCKERHUB_REPO_NAME: ${DRONE_REPO_NAME}
|
||||||
|
DOCKERHUB_REPO_PREFIX: xoxys
|
||||||
|
DOCKERHUB_USERNAME:
|
||||||
|
from_secret: docker_username
|
||||||
|
README_PATH: README.md
|
||||||
|
SHORT_DESCRIPTION: lhci - Simple wrapper for lighthouse-ci
|
||||||
|
when:
|
||||||
|
status:
|
||||||
|
- success
|
||||||
|
|
||||||
|
- name: matrix
|
||||||
|
image: plugins/matrix
|
||||||
|
settings:
|
||||||
|
homeserver:
|
||||||
|
from_secret: matrix_homeserver
|
||||||
|
password:
|
||||||
|
from_secret: matrix_password
|
||||||
|
roomid:
|
||||||
|
from_secret: matrix_roomid
|
||||||
|
template: "Status: **{{ build.status }}**<br/> Build: [{{ repo.Owner }}/{{ repo.Name }}]({{ build.link }}) ({{ build.branch }}) by {{ build.author }}<br/> Message: {{ build.message }}"
|
||||||
|
username:
|
||||||
|
from_secret: matrix_username
|
||||||
|
when:
|
||||||
|
status:
|
||||||
|
- success
|
||||||
|
- failure
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
ref:
|
||||||
|
- refs/heads/master
|
||||||
|
- refs/tags/**
|
||||||
|
status:
|
||||||
|
- success
|
||||||
|
- failure
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- build-container
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: signature
|
||||||
|
hmac: befd5fdd0b708ae98e2935494ee9220d94de90b485300b0fe489da6752c071d8
|
||||||
|
|
||||||
|
...
|
1
CHANGELOG.md
Normal file
1
CHANGELOG.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
- initial release
|
41
Dockerfile
Normal file
41
Dockerfile
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
FROM node:10-alpine
|
||||||
|
# due to https://github.com/http-party/http-server/issues/537
|
||||||
|
|
||||||
|
LABEL maintainer="Robert Kaussow <mail@geeklabor.de>" \
|
||||||
|
org.label-schema.name="lhci" \
|
||||||
|
org.label-schema.vcs-url="https://gitea.rknet.org/docker/lhci" \
|
||||||
|
org.label-schema.vendor="Robert Kaussow" \
|
||||||
|
org.label-schema.schema-version="1.0"
|
||||||
|
|
||||||
|
ARG BUILD_VERSION=latest
|
||||||
|
|
||||||
|
ENV LHCI_VERSION="${BUILD_VERSION:-latest}" \
|
||||||
|
LHCI_BASE_DIR=/drone/src \
|
||||||
|
FORCE_COLOR=true \
|
||||||
|
NPM_CONFIG_LOGLEVEL=error
|
||||||
|
|
||||||
|
ADD overlay/ /
|
||||||
|
|
||||||
|
RUN apk --update add --virtual .build-deps curl && \
|
||||||
|
apk add --update --no-cache git chromium jq && \
|
||||||
|
curl -SsL -o /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/3.3.2/yq_linux_amd64 && \
|
||||||
|
chmod 755 /usr/local/bin/yq && \
|
||||||
|
LHCI_VERSION="${LHCI_VERSION##v}" && \
|
||||||
|
LHCI_MAJOR="${LHCI_VERSION%%.*}" && \
|
||||||
|
if [ -z "${LHCI_MAJOR//[0-9]}" ] && [ -n "$LHCI_MAJOR" ]; then \
|
||||||
|
echo "Installing lhci version '$LHCI_VERSION' ..." && \
|
||||||
|
npm install -g @lhci/cli@"$LHCI_VERSION"; \
|
||||||
|
else \
|
||||||
|
echo "Installing latest lhci ..." && \
|
||||||
|
npm install -g @lhci/cli; \
|
||||||
|
fi && \
|
||||||
|
npm install -g lighthouse && \
|
||||||
|
apk del .build-deps && \
|
||||||
|
rm -rf /var/cache/apk/* && \
|
||||||
|
rm -rf /tmp/* && \
|
||||||
|
rm -rf /root/.cache/
|
||||||
|
|
||||||
|
USER root
|
||||||
|
CMD []
|
||||||
|
WORKDIR /drone/src
|
||||||
|
ENTRYPOINT ["/usr/bin/lhci", "autorun"]
|
92
README.md
Normal file
92
README.md
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
# [lhci](https://gitea.rknet.org/docker/lhci)
|
||||||
|
|
||||||
|
[![Build Status](https://img.shields.io/drone/build/docker/lhci?logo=drone&server=https%3A%2F%2Fdrone.rknet.org)](https://drone.rknet.org/docker/lhci)
|
||||||
|
[![Docker Hub](https://img.shields.io/badge/docker-latest-blue.svg?logo=docker&logoColor=white)](https://hub.docker.com/r/xoxys/lhci)
|
||||||
|
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://gitea.rknet.org/docker/lhci/src/branch/master/LICENSE)
|
||||||
|
|
||||||
|
Simple wrapper for [lighthouse-ci](https://github.com/GoogleChrome/lighthouse-ci).
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
There are two wrapper scripts around the lhci command you could use:
|
||||||
|
|
||||||
|
- `/usr/bin/lhci-official`: This will simply forward your command to the official binary at `/usr/local/bin/lhci`
|
||||||
|
- `/usr/bin/lhci`: This is a modified wrapper to post-process the created report file to prepare an upload.
|
||||||
|
|
||||||
|
The wrapper `/usr/bin/lhci` will do the following:
|
||||||
|
|
||||||
|
- create `DIST=$LHCI_BASE_DIR/$UPLOAD_OUTPUT_DIR/dist/$LHCI_REPO_NAME`
|
||||||
|
- find all files flagged with `isRepresentativeRun` in the `manifest.json`
|
||||||
|
- copy those files to `$DIST`
|
||||||
|
|
||||||
|
To get it working you need to configure the `fileupload` in `.lighthouserc.yml`command line configuration will not work:
|
||||||
|
|
||||||
|
```Yaml
|
||||||
|
---
|
||||||
|
ci:
|
||||||
|
[...]
|
||||||
|
upload:
|
||||||
|
target: filesystem
|
||||||
|
# has to be a relative path to the .lighthouserc.yml location
|
||||||
|
outputDir: lhci_reports
|
||||||
|
```
|
||||||
|
|
||||||
|
What you will get is the following file structure which could be used as an upload source:
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
lhci_reports/dist/$REPO_NAME/
|
||||||
|
├── 9cf658e2-202007160745.html
|
||||||
|
├── f33fa4c4-202007160745.html
|
||||||
|
└── ffae8d3e-202007160745.html
|
||||||
|
|
||||||
|
# <FILENAME_HASH>-<DATETIME>.html
|
||||||
|
```
|
||||||
|
|
||||||
|
You will also get the target URLs in your CI output:
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
/usr/bin/lhci autorun
|
||||||
|
|
||||||
|
[...]
|
||||||
|
|
||||||
|
All results processed!
|
||||||
|
|
||||||
|
Dumping 6 reports to disk at /drone/src/lhci_reports...
|
||||||
|
Done writing reports to disk.
|
||||||
|
|
||||||
|
Done running autorun.
|
||||||
|
|
||||||
|
Post-process report files...
|
||||||
|
Report for http://localhost:43901/ will be uploaded to https://example.com/9cf658e2-202007160745.html
|
||||||
|
Report for http://localhost:43901/404.html will be uploaded to https://example.com/ffae8d3e-202007160745.html
|
||||||
|
Report for http://localhost:43901/posts/ will be uploaded to https://example.com/f33fa4c4-202007160745.html
|
||||||
|
```
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
docker run -v $(pwd)/public:/drone/src lhci autorun
|
||||||
|
|
||||||
|
# or pass arguments to lhci
|
||||||
|
docker run -v $(pwd)/public:/drone/src lhci autorun --upload.target=temporary-public-storage
|
||||||
|
```
|
||||||
|
|
||||||
|
## Environment variables
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
LHCI_BASE_DIR="/drone/src"
|
||||||
|
LHCI_SERVER_URL="https://example.com/"
|
||||||
|
LHCI_REPO_NAME=$DRONE_REO_NAME
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
```Shell
|
||||||
|
docker build -t lhci:latest .
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License - see the [LICENSE](https://gitea.rknet.org/docker/lhci/src/branch/master/LICENSE) file for details.
|
||||||
|
|
||||||
|
## Maintainers and Contributors
|
||||||
|
|
||||||
|
[Robert Kaussow](https://gitea.rknet.org/xoxys)
|
32
overlay/usr/bin/lhci
Executable file
32
overlay/usr/bin/lhci
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
CONFIG="${LHCI_BASE_DIR%/}/.lighthouserc.yml"
|
||||||
|
|
||||||
|
/usr/local/bin/lhci "$@"
|
||||||
|
|
||||||
|
if [ -f "$CONFIG" ]; then
|
||||||
|
|
||||||
|
UPLOAD_TARGET=$(yq r "${CONFIG}" --defaultValue "" ci.upload.target)
|
||||||
|
UPLOAD_OUTPUT_DIR=$(yq r "${CONFIG}" --defaultValue "" ci.upload.outputDir)
|
||||||
|
|
||||||
|
if [ "${UPLOAD_TARGET}" = "filesystem" ] && [ -n "${UPLOAD_OUTPUT_DIR}" ] ; then
|
||||||
|
MANIFEST=${UPLOAD_OUTPUT_DIR%/}/manifest.json
|
||||||
|
DIST="${LHCI_BASE_DIR%/}/${UPLOAD_OUTPUT_DIR%/}/dist/${LHCI_REPO_NAME}"
|
||||||
|
mkdir -p "${DIST}"
|
||||||
|
|
||||||
|
printf "\nPost-process report files...\n"
|
||||||
|
for ITEM in $(jq -r '.[] | select( .isRepresentativeRun == true ) | @base64' < "${MANIFEST}"); do
|
||||||
|
JSON=$(echo "${ITEM}" | base64 -d)
|
||||||
|
FILE_DATE=$(date '+%Y%m%d%H%M')
|
||||||
|
|
||||||
|
FILENAME=$(echo "${JSON}" | jq -r '.htmlPath')
|
||||||
|
HASH=$(sha1sum "$FILENAME")
|
||||||
|
FILENAME_NEW="${HASH:0:8}-$FILE_DATE"
|
||||||
|
URL=$(echo "${JSON}" | jq -r '.url')
|
||||||
|
|
||||||
|
cp "${FILENAME}" "${DIST}/${FILENAME_NEW}.html"
|
||||||
|
echo "Report for ${URL} will be uploaded to ${LHCI_SERVER_URL%/}/$(basename "${FILENAME_NEW}").html"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
4
overlay/usr/bin/lhci-official
Executable file
4
overlay/usr/bin/lhci-official
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env sh
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
|
exec /usr/local/bin/lhci "$@"
|
Loading…
Reference in New Issue
Block a user