chore: migrate to gh actions (#1775)
* chore: migrate to gh actions * chore: update baselines * chore: remove circle
@@ -1,265 +0,0 @@
|
|||||||
version: 2.1
|
|
||||||
|
|
||||||
aliases:
|
|
||||||
- &restore_yarn_cache
|
|
||||||
name: Restore yarn cache
|
|
||||||
keys:
|
|
||||||
- yarn-packages-v2-{{ checksum "yarn.lock" }}
|
|
||||||
- &save_yarn_cache
|
|
||||||
name: Save yarn cache
|
|
||||||
paths:
|
|
||||||
- ~/.cache/yarn
|
|
||||||
- ./node_modules
|
|
||||||
- ./apis/locale/node_modules
|
|
||||||
- ./apis/stardust/node_modules
|
|
||||||
- ./apis/nucleus/node_modules
|
|
||||||
- ./commands/sense/node_modules
|
|
||||||
- ./commands/build/node_modules
|
|
||||||
- ./commands/serve/node_modules
|
|
||||||
- ./commands/create/node_modules
|
|
||||||
key: yarn-packages-v2-{{ checksum "yarn.lock" }}
|
|
||||||
- &filter_master
|
|
||||||
branches:
|
|
||||||
only: master
|
|
||||||
- &attach
|
|
||||||
at: ~/project
|
|
||||||
|
|
||||||
commands:
|
|
||||||
nebula_create:
|
|
||||||
description: 'Create Nebula visualization project'
|
|
||||||
parameters:
|
|
||||||
project_name:
|
|
||||||
type: string
|
|
||||||
description: 'Project name'
|
|
||||||
picasso_template:
|
|
||||||
type: string
|
|
||||||
description: 'Picasso template'
|
|
||||||
default: 'none'
|
|
||||||
mashup:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
install:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
description: 'Run package installation step'
|
|
||||||
build:
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
description: 'Build project'
|
|
||||||
test:
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
description: 'Run tests'
|
|
||||||
steps:
|
|
||||||
- run:
|
|
||||||
name: 'Create Nebula visualization project: <<# parameters.mashup >>Mashup<</ parameters.mashup >><<^ parameters.mashup >>Picasso template "<< parameters.picasso_template >>" <</ parameters.mashup >> in << parameters.project_name >>'
|
|
||||||
command: |
|
|
||||||
set -e
|
|
||||||
<<# parameters.mashup >>
|
|
||||||
echo "Create mashup project"
|
|
||||||
./commands/cli/lib/index.js create mashup << parameters.project_name >> --install << parameters.install >> --pkgm yarn
|
|
||||||
<</ parameters.mashup >>
|
|
||||||
<<^ parameters.mashup >>
|
|
||||||
echo "Create project based on Picasso template"
|
|
||||||
./commands/cli/lib/index.js create << parameters.project_name >> --picasso << parameters.picasso_template >> --install << parameters.install >> --pkgm yarn
|
|
||||||
<</ parameters.mashup >>
|
|
||||||
echo "Yarn"
|
|
||||||
yarn
|
|
||||||
echo "Linking packages"
|
|
||||||
(cd apis/stardust && yarn link)
|
|
||||||
(cd commands/cli && yarn link)
|
|
||||||
(cd commands/build && yarn link)
|
|
||||||
(cd commands/serve && yarn link)
|
|
||||||
cd << parameters.project_name >>
|
|
||||||
yarn link "@nebula.js/stardust"
|
|
||||||
yarn link "@nebula.js/cli"
|
|
||||||
yarn link "@nebula.js/cli-build"
|
|
||||||
yarn link "@nebula.js/cli-serve"
|
|
||||||
echo "Log node_modules/@nebula.js"
|
|
||||||
ls -la node_modules/@nebula.js
|
|
||||||
<<# parameters.build >> yarn run build <</ parameters.build >>
|
|
||||||
<<# parameters.test >> yarn run test:e2e <</ parameters.test >>
|
|
||||||
jobs:
|
|
||||||
validate:
|
|
||||||
docker:
|
|
||||||
- image: cimg/node:24.2.0
|
|
||||||
working_directory: ~/project
|
|
||||||
steps:
|
|
||||||
- attach_workspace:
|
|
||||||
at: ~/project
|
|
||||||
- run:
|
|
||||||
name: Locale
|
|
||||||
command: yarn run locale:verify
|
|
||||||
- run:
|
|
||||||
name: Lint
|
|
||||||
command: yarn run lint
|
|
||||||
- run:
|
|
||||||
name: Run unit tests and publish to codeclimate
|
|
||||||
command: |
|
|
||||||
./test/bin/cc-test-reporter before-build
|
|
||||||
yarn test:unit --coverage --reporters=default --reporters=jest-junit
|
|
||||||
./test/bin/cc-test-reporter after-build --coverage-input-type lcov --exit-code $?
|
|
||||||
environment:
|
|
||||||
JEST_JUNIT_OUTPUT_DIR: ./coverage/junit/
|
|
||||||
- store_test_results:
|
|
||||||
path: coverage/junit
|
|
||||||
|
|
||||||
build:
|
|
||||||
docker:
|
|
||||||
- image: cimg/node:24.2.0
|
|
||||||
|
|
||||||
working_directory: ~/project
|
|
||||||
resource_class: large
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- restore_cache: *restore_yarn_cache
|
|
||||||
- run:
|
|
||||||
name: Install dependencies
|
|
||||||
command: yarn install --frozen-lockfile --cache-folder ~/.cache/yarn
|
|
||||||
- save_cache: *save_yarn_cache
|
|
||||||
- run:
|
|
||||||
name: Build
|
|
||||||
command: yarn run build
|
|
||||||
- store_artifacts:
|
|
||||||
path: package.json
|
|
||||||
- persist_to_workspace:
|
|
||||||
root: ~/project
|
|
||||||
paths:
|
|
||||||
- .
|
|
||||||
|
|
||||||
test-integration:
|
|
||||||
docker:
|
|
||||||
- image: cimg/node:24.2.0
|
|
||||||
- image: browserless/chrome:1-puppeteer-7.1.0
|
|
||||||
|
|
||||||
working_directory: ~/project
|
|
||||||
resource_class: large
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- attach_workspace:
|
|
||||||
at: ~/project
|
|
||||||
- run:
|
|
||||||
name: Install Playwright Browsers
|
|
||||||
command: npx playwright install --with-deps
|
|
||||||
- run:
|
|
||||||
name: Test component
|
|
||||||
command: yarn run test:component
|
|
||||||
- run:
|
|
||||||
name: Test mashup
|
|
||||||
command: yarn run test:mashup
|
|
||||||
- store_artifacts:
|
|
||||||
path: ./test/mashup
|
|
||||||
- run:
|
|
||||||
name: Test integration
|
|
||||||
command: yarn run test:integration
|
|
||||||
- run:
|
|
||||||
name: Test rendering
|
|
||||||
command: yarn run test:rendering
|
|
||||||
- store_artifacts:
|
|
||||||
path: ./test/rendering
|
|
||||||
|
|
||||||
test-create:
|
|
||||||
docker:
|
|
||||||
- image: cimg/node:24.2.0
|
|
||||||
- image: browserless/chrome:1-puppeteer-7.1.0
|
|
||||||
|
|
||||||
working_directory: ~/project
|
|
||||||
resource_class: large
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- attach_workspace:
|
|
||||||
at: ~/project
|
|
||||||
- run: npx playwright install --with-deps chromium
|
|
||||||
- nebula_create:
|
|
||||||
project_name: 'generated/hello'
|
|
||||||
picasso_template: 'none'
|
|
||||||
build: true
|
|
||||||
test: true
|
|
||||||
- nebula_create:
|
|
||||||
project_name: generated/barchart
|
|
||||||
picasso_template: 'barchart'
|
|
||||||
build: true
|
|
||||||
test: true
|
|
||||||
- nebula_create:
|
|
||||||
project_name: 'hello-mashup'
|
|
||||||
mashup: true
|
|
||||||
install: true
|
|
||||||
build: true
|
|
||||||
test: false
|
|
||||||
- store_artifacts:
|
|
||||||
path: generated/barchart/screenshots
|
|
||||||
- store_artifacts:
|
|
||||||
path: test/mashup/__artifacts__
|
|
||||||
|
|
||||||
api-governance:
|
|
||||||
machine:
|
|
||||||
image: ubuntu-2004:current
|
|
||||||
working_directory: ~/project
|
|
||||||
steps:
|
|
||||||
- attach_workspace:
|
|
||||||
at: ~/project
|
|
||||||
- run:
|
|
||||||
name: Create version.txt
|
|
||||||
command: |
|
|
||||||
set -x
|
|
||||||
if [ -n "${CIRCLE_TAG}" ]; then
|
|
||||||
version=${CIRCLE_TAG#v}
|
|
||||||
else
|
|
||||||
yarn workspace "@nebula.js/stardust" version --prepatch --no-git-tag-version
|
|
||||||
version=$(node -p "require('./apis/stardust/api-spec/spec.json').info.version")
|
|
||||||
fi
|
|
||||||
echo "$version" > ./version.txt
|
|
||||||
echo "Building $version"
|
|
||||||
- run:
|
|
||||||
name: Prepare API Compliance
|
|
||||||
command: |
|
|
||||||
docker pull ghcr.io/qlik-download/api-compliance
|
|
||||||
docker create -v /specs --name specs alpine:3.4 /bin/true
|
|
||||||
docker cp ./apis/stardust/api-spec/spec.json specs:/specs
|
|
||||||
docker cp ./apis/stardust/api-spec/listbox-spec.json specs:/specs
|
|
||||||
|
|
||||||
- run:
|
|
||||||
name: Run API Compliance
|
|
||||||
command: >
|
|
||||||
VER=v$(cat version.txt)
|
|
||||||
|
|
||||||
docker run --volumes-from specs
|
|
||||||
-e SPEC_PATHS="abdc47c2-921a-45d3-ba5c-80d448574c5b@/specs/spec.json,ba0bcf91-d7a6-4048-a36a-ad9a2dc8c03e@/specs/listbox-spec.json"
|
|
||||||
-e COMMIT_SHA="$CIRCLE_SHA1"
|
|
||||||
-e RELEASE_TAG="$VER"
|
|
||||||
-e PRE_RELEASE="true"
|
|
||||||
-e CREDENTIALS_S3_SECRETKEY="$APICULTURIST_S3"
|
|
||||||
-e CREDENTIALS_GITHUB="$APICULTURIST_GITHUB"
|
|
||||||
-e CREDENTIALS_COLONY="$APICULTURIST_TOKEN"
|
|
||||||
ghcr.io/qlik-download/api-compliance
|
|
||||||
|
|
||||||
workflows:
|
|
||||||
version: 2
|
|
||||||
build-deploy:
|
|
||||||
jobs:
|
|
||||||
- build:
|
|
||||||
filters:
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /v.*/
|
|
||||||
- validate:
|
|
||||||
requires:
|
|
||||||
- build
|
|
||||||
- test-integration:
|
|
||||||
requires:
|
|
||||||
- build
|
|
||||||
- test-create:
|
|
||||||
requires:
|
|
||||||
- build
|
|
||||||
- api-governance:
|
|
||||||
context: api-compliance
|
|
||||||
requires:
|
|
||||||
- build
|
|
||||||
filters:
|
|
||||||
branches:
|
|
||||||
# Forked pull requests have CIRCLE_BRANCH set to pull/XXX
|
|
||||||
ignore: /pull\/[0-9]+/
|
|
||||||
tags:
|
|
||||||
only:
|
|
||||||
- /v.*/
|
|
||||||
38
.github/scripts/nebula_create.sh
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
PROJECT_NAME="$1"
|
||||||
|
PICASSO_TEMPLATE="${2:-none}"
|
||||||
|
MASHUP="${3:-false}"
|
||||||
|
INSTALL="${4:-false}"
|
||||||
|
BUILD="${5:-true}"
|
||||||
|
TEST="${6:-true}"
|
||||||
|
|
||||||
|
if [ "$MASHUP" = "true" ]; then
|
||||||
|
echo "Create mashup project"
|
||||||
|
./commands/cli/lib/index.js create mashup "$PROJECT_NAME" --install "$INSTALL" --pkgm yarn
|
||||||
|
else
|
||||||
|
echo "Create project based on Picasso template"
|
||||||
|
./commands/cli/lib/index.js create "$PROJECT_NAME" --picasso "$PICASSO_TEMPLATE" --install "$INSTALL" --pkgm yarn
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Yarn"
|
||||||
|
yarn
|
||||||
|
echo "Linking packages"
|
||||||
|
(cd apis/stardust && yarn link)
|
||||||
|
(cd commands/cli && yarn link)
|
||||||
|
(cd commands/build && yarn link)
|
||||||
|
(cd commands/serve && yarn link)
|
||||||
|
cd "$PROJECT_NAME"
|
||||||
|
yarn link "@nebula.js/stardust"
|
||||||
|
yarn link "@nebula.js/cli"
|
||||||
|
yarn link "@nebula.js/cli-build"
|
||||||
|
yarn link "@nebula.js/cli-serve"
|
||||||
|
echo "Log node_modules/@nebula.js"
|
||||||
|
ls -la node_modules/@nebula.js
|
||||||
|
if [ "$BUILD" = "true" ]; then
|
||||||
|
yarn run build
|
||||||
|
fi
|
||||||
|
if [ "$TEST" = "true" ]; then
|
||||||
|
yarn run test:e2e
|
||||||
|
fi
|
||||||
129
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
|
tags: ['v*']
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
env:
|
||||||
|
JEST_JUNIT_OUTPUT_DIR: ./coverage/junit/
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 24.x
|
||||||
|
cache: 'yarn'
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install --frozen-lockfile
|
||||||
|
- name: Build
|
||||||
|
run: yarn run build
|
||||||
|
- name: Upload workspace
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: workspace
|
||||||
|
path: .
|
||||||
|
retention-days: 1
|
||||||
|
|
||||||
|
validate:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Download workspace
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: workspace
|
||||||
|
path: .
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install --frozen-lockfile
|
||||||
|
- name: Locale verify
|
||||||
|
run: yarn run locale:verify
|
||||||
|
- name: Lint
|
||||||
|
run: yarn run lint
|
||||||
|
- name: Run unit tests and publish to codeclimate
|
||||||
|
env:
|
||||||
|
JEST_JUNIT_OUTPUT_DIR: ./coverage/junit/
|
||||||
|
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
|
||||||
|
run: |
|
||||||
|
./test/bin/cc-test-reporter before-build
|
||||||
|
yarn test:unit --coverage --reporters=default --reporters=jest-junit
|
||||||
|
./test/bin/cc-test-reporter after-build --coverage-input-type lcov --exit-code $?
|
||||||
|
- name: Store junit results
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: junit
|
||||||
|
path: coverage/junit
|
||||||
|
|
||||||
|
test-integration:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Download workspace
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: workspace
|
||||||
|
path: .
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install --frozen-lockfile
|
||||||
|
- name: Install Playwright Browsers
|
||||||
|
run: npx playwright install --with-deps
|
||||||
|
- name: Test component
|
||||||
|
run: yarn run test:component
|
||||||
|
- name: Test mashup
|
||||||
|
run: yarn run test:mashup
|
||||||
|
- name: Store mashup artifacts
|
||||||
|
if: always()
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: mashup
|
||||||
|
path: ./test/mashup
|
||||||
|
- name: Test integration
|
||||||
|
run: yarn run test:integration
|
||||||
|
- name: Test rendering
|
||||||
|
run: yarn run test:rendering
|
||||||
|
- name: Store rendering artifacts
|
||||||
|
if: always()
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: rendering
|
||||||
|
path: ./test/rendering
|
||||||
|
|
||||||
|
test-create:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Download workspace
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: workspace
|
||||||
|
path: .
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install --frozen-lockfile
|
||||||
|
- name: Install Playwright Chromium
|
||||||
|
run: npx playwright install --with-deps chromium
|
||||||
|
- run: chmod +x .github/scripts/nebula_create.sh
|
||||||
|
- name: Create Nebula visualization project (Picasso)
|
||||||
|
run: .github/scripts/nebula_create.sh generated/hello none false false true true
|
||||||
|
- name: Create Nebula visualization project (Barchart)
|
||||||
|
run: .github/scripts/nebula_create.sh generated/barchart barchart false false true true
|
||||||
|
- name: Create Nebula mashup project
|
||||||
|
run: .github/scripts/nebula_create.sh hello-mashup none true true true false
|
||||||
|
- name: Store barchart screenshots
|
||||||
|
if: always()
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: barchart-screenshots
|
||||||
|
path: generated/barchart/screenshots
|
||||||
|
- name: Store mashup artifacts
|
||||||
|
if: always()
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: mashup-artifacts
|
||||||
|
path: test/mashup/__artifacts__
|
||||||
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 14 KiB |