Merge pull request #1152 from blockscout/tom2drum/issue-972
Add support for custom favicon
@@ -81,7 +81,7 @@ RUN yarn build
|
||||
# *****************************
|
||||
# Production image, copy all the files and run next
|
||||
FROM node:18-alpine AS runner
|
||||
RUN apk add --no-cache --upgrade bash
|
||||
RUN apk add --no-cache --upgrade bash curl jq unzip
|
||||
|
||||
### APP
|
||||
WORKDIR /app
|
||||
@@ -98,9 +98,18 @@ COPY --from=builder /app/package.json ./package.json
|
||||
COPY --from=builder /envs-validator/index.js ./envs-validator.js
|
||||
COPY --from=builder /app/deploy/tools/feature-reporter/index.js ./feature-reporter.js
|
||||
|
||||
# Copy scripts and ENVs file
|
||||
# Copy scripts
|
||||
## Entripoint
|
||||
COPY --chmod=+x ./deploy/scripts/entrypoint.sh .
|
||||
## ENV replacer
|
||||
COPY --chmod=+x ./deploy/scripts/replace_envs.sh .
|
||||
## Favicon generator
|
||||
COPY --chmod=+x ./deploy/scripts/favicon_generator.sh .
|
||||
COPY ./deploy/tools/favicon-generator ./deploy/tools/favicon-generator
|
||||
RUN ["chmod", "-R", "777", "./deploy/tools/favicon-generator"]
|
||||
RUN ["chmod", "-R", "777", "./public"]
|
||||
|
||||
# Copy ENVs files
|
||||
COPY --from=builder /app/.env.production .
|
||||
COPY --from=builder /app/.env .
|
||||
|
||||
|
||||
@@ -6,6 +6,14 @@ if [ $? != 0 ]; then
|
||||
echo 🛑 ENV integrity check failed. 1>&2 && exit 1
|
||||
fi
|
||||
|
||||
# Generate favicons bundle
|
||||
./favicon_generator.sh
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "👎 Unable to generate favicons bundle."
|
||||
else
|
||||
echo "👍 Favicons bundle successfully generated."
|
||||
fi
|
||||
|
||||
# Execute script for replace build-time ENVs placeholders with their values at runtime
|
||||
./replace_envs.sh
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
|
||||
master_url="${NEXT_PUBLIC_FAVICON_MASTER_URL:-$NEXT_PUBLIC_NETWORK_ICON}"
|
||||
export MASTER_URL="$master_url"
|
||||
|
||||
cd ./deploy/tools/favicon-generator
|
||||
./script.sh
|
||||
if [ $? -ne 0 ]; then
|
||||
cd ../../../
|
||||
exit 1
|
||||
else
|
||||
cd ../../../
|
||||
favicon_folder="./public/favicon/"
|
||||
|
||||
echo "⏳ Replacing default favicons with freshly generated pack..."
|
||||
if [ -d "$favicon_folder" ]; then
|
||||
rm -r "$favicon_folder"
|
||||
fi
|
||||
mkdir -p "$favicon_folder"
|
||||
cp -r ./deploy/tools/favicon-generator/output/* "$favicon_folder"
|
||||
fi
|
||||
@@ -0,0 +1,4 @@
|
||||
/output
|
||||
config.json
|
||||
response.json
|
||||
favicon_package**
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"favicon_generation": {
|
||||
"api_key": "<api_key>",
|
||||
"master_picture": {
|
||||
"type": "url",
|
||||
"url": "<master_url>"
|
||||
},
|
||||
"files_location": {
|
||||
"type": "path",
|
||||
"path": "/favicons"
|
||||
},
|
||||
"favicon_design": {
|
||||
"desktop_browser": {},
|
||||
"ios": {
|
||||
"picture_aspect": "no_change",
|
||||
"assets": {
|
||||
"ios6_and_prior_icons": false,
|
||||
"ios7_and_later_icons": true,
|
||||
"precomposed_icons": false,
|
||||
"declare_only_default_icon": true
|
||||
}
|
||||
},
|
||||
"safari_pinned_tab": {
|
||||
"picture_aspect": "black_and_white",
|
||||
"threshold": 60
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"compression": "3",
|
||||
"scaling_algorithm": "Mitchell",
|
||||
"error_on_image_too_small": true,
|
||||
"readme_file": false,
|
||||
"html_code_file": false,
|
||||
"use_path_as_is": false
|
||||
},
|
||||
"versioning": {
|
||||
"param_name": "ver",
|
||||
"param_value": "15Zd8"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🌀 Generating favicons bundle..."
|
||||
|
||||
# Check if MASTER_URL is provided
|
||||
if [ -z "$MASTER_URL" ]; then
|
||||
echo "🛑 Error: MASTER_URL variable is not provided."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY is provided
|
||||
if [ -z "$NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY" ]; then
|
||||
echo "🛑 Error: NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY variable is not provided."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Mask the NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY to display only the first 8 characters
|
||||
API_KEY_MASKED="${NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY:0:8}***"
|
||||
echo "🆗 The following variables are provided:"
|
||||
echo " MASTER_URL: $MASTER_URL"
|
||||
echo " NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY: $API_KEY_MASKED"
|
||||
echo
|
||||
|
||||
# RealFaviconGenerator API endpoint URL
|
||||
API_URL="https://realfavicongenerator.net/api/favicon"
|
||||
|
||||
# Target folder for the downloaded assets
|
||||
TARGET_FOLDER="./output"
|
||||
|
||||
# Path to the config JSON template file
|
||||
CONFIG_TEMPLATE_FILE="config.template.json"
|
||||
|
||||
# Path to the generated config JSON file
|
||||
CONFIG_FILE="config.json"
|
||||
|
||||
# Replace <api_key> and <master_url> placeholders in the JSON template file
|
||||
API_KEY_VALUE="$NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY"
|
||||
sed -e "s|<api_key>|$API_KEY_VALUE|" -e "s|<master_url>|$MASTER_URL|" "$CONFIG_TEMPLATE_FILE" > "$CONFIG_FILE"
|
||||
|
||||
# Make the API POST request with JSON data from the config file
|
||||
echo "⏳ Making request to API..."
|
||||
API_RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -d @"$CONFIG_FILE" "$API_URL")
|
||||
|
||||
# Create the response.json file with the API response
|
||||
echo "$API_RESPONSE" > response.json
|
||||
|
||||
# Check if the API response is valid JSON and contains success status
|
||||
if ! jq -e '.favicon_generation_result.result.status == "success"' <<< "$API_RESPONSE" >/dev/null; then
|
||||
echo "🛑 Error: API response does not contain the expected structure or has an error status."
|
||||
ERROR_MESSAGE=$(echo "$API_RESPONSE" | jq -r '.favicon_generation_result.result.error_message' | tr -d '\\')
|
||||
if [ -n "$ERROR_MESSAGE" ]; then
|
||||
echo "🛑 $ERROR_MESSAGE"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
echo "🆗 API responded with success status."
|
||||
|
||||
# Parse the JSON response to extract the file URL and remove backslashes
|
||||
FILE_URL=$(echo "$API_RESPONSE" | jq -r '.favicon_generation_result.favicon.package_url' | tr -d '\\')
|
||||
PREVIEW_URL=$(echo "$API_RESPONSE" | jq -r '.favicon_generation_result.preview_picture_url' | tr -d '\\')
|
||||
|
||||
# Check if FILE_URL is empty
|
||||
if [ -z "$FILE_URL" ]; then
|
||||
echo "🛑 File URL not found in JSON response."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🆗 Found following file URL in the response: $FILE_URL"
|
||||
echo "🆗 Favicon preview URL: $PREVIEW_URL"
|
||||
echo
|
||||
|
||||
# Generate a filename based on the URL
|
||||
FILE_NAME=$(basename "$FILE_URL")
|
||||
|
||||
# Check if the target folder exists and clear its contents if it does
|
||||
if [ -d "$TARGET_FOLDER" ]; then
|
||||
rm -r "$TARGET_FOLDER"
|
||||
fi
|
||||
mkdir -p "$TARGET_FOLDER"
|
||||
|
||||
# Download the file
|
||||
echo "⏳ Trying to download the file..."
|
||||
curl -s -L "$FILE_URL" -o "$FILE_NAME"
|
||||
|
||||
# Check if the download was successful
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "🆗 File downloaded successfully."
|
||||
echo
|
||||
else
|
||||
echo "🛑 Error: Failed to download the file."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Unzip the downloaded file to the target folder
|
||||
echo "⏳ Unzipping the file..."
|
||||
unzip -q "$FILE_NAME" -d "$TARGET_FOLDER"
|
||||
|
||||
# Check if the unzip operation was successful
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "🆗 File unzipped successfully."
|
||||
echo
|
||||
else
|
||||
echo "🛑 Failed to unzip the file."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Clean up - remove the JSON response file and temporary JSON config file
|
||||
rm response.json "$CONFIG_FILE"
|
||||
|
||||
echo "✅ Done."
|
||||
@@ -200,3 +200,4 @@ frontend:
|
||||
envFromSecret:
|
||||
NEXT_PUBLIC_AUTH0_CLIENT_ID: ref+vault://deployment-values/blockscout/dev/l2-optimism-goerli?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_AUTH0_CLIENT_ID
|
||||
NEXT_PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID: ref+vault://deployment-values/blockscout/dev/l2-optimism-goerli?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID
|
||||
NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY: ref+vault://deployment-values/blockscout/common?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY
|
||||
|
||||
@@ -166,3 +166,4 @@ frontend:
|
||||
NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID: ref+vault://deployment-values/blockscout/dev/front-main?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_WALLET_CONNECT_PROJECT_ID
|
||||
NEXT_PUBLIC_RE_CAPTCHA_APP_SITE_KEY: ref+vault://deployment-values/blockscout/dev/front-main?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_RE_CAPTCHA_APP_SITE_KEY
|
||||
NEXT_PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID: ref+vault://deployment-values/blockscout/dev/front-main?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID
|
||||
NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY: ref+vault://deployment-values/blockscout/common?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY
|
||||
|
||||
@@ -24,6 +24,7 @@ frontend:
|
||||
- "/account"
|
||||
- "/apps"
|
||||
- "/static"
|
||||
- "/favicon"
|
||||
- "/auth/profile"
|
||||
- "/auth/unverified-email"
|
||||
- "/txs"
|
||||
@@ -143,3 +144,5 @@ frontend:
|
||||
_default: ref+vault://deployment-values/blockscout/dev/review-l2?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_RE_CAPTCHA_APP_SITE_KEY
|
||||
NEXT_PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID:
|
||||
_default: ref+vault://deployment-values/blockscout/dev/review-l2?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID
|
||||
NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY:
|
||||
_default: ref+vault://deployment-values/blockscout/common?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY
|
||||
|
||||
@@ -23,6 +23,7 @@ frontend:
|
||||
- "/account"
|
||||
- "/apps"
|
||||
- "/static"
|
||||
- "/favicon"
|
||||
- "/auth/profile"
|
||||
- "/auth/unverified-email"
|
||||
- "/txs"
|
||||
@@ -77,6 +78,10 @@ frontend:
|
||||
_default: 'true'
|
||||
NEXT_PUBLIC_FEATURED_NETWORKS:
|
||||
_default: https://raw.githubusercontent.com/blockscout/frontend-configs/dev/configs/featured-networks/eth-goerli.json
|
||||
NEXT_PUBLIC_NETWORK_LOGO:
|
||||
_default: https://raw.githubusercontent.com/blockscout/frontend-configs/main/configs/network-logos/goerli.svg
|
||||
NEXT_PUBLIC_NETWORK_ICON:
|
||||
_default: https://raw.githubusercontent.com/blockscout/frontend-configs/main/configs/network-icons/goerli.svg
|
||||
NEXT_PUBLIC_API_HOST:
|
||||
_default: blockscout-main.k8s-dev.blockscout.com
|
||||
NEXT_PUBLIC_STATS_API_HOST:
|
||||
@@ -123,5 +128,7 @@ frontend:
|
||||
_default: ref+vault://deployment-values/blockscout/dev/review?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_RE_CAPTCHA_APP_SITE_KEY
|
||||
NEXT_PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID:
|
||||
_default: ref+vault://deployment-values/blockscout/dev/review?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_GOOGLE_ANALYTICS_PROPERTY_ID
|
||||
NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY:
|
||||
_default: ref+vault://deployment-values/blockscout/common?token_env=VAULT_TOKEN&address=https://vault.k8s.blockscout.com#/NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY
|
||||
NEXT_PUBLIC_WEB3_WALLETS:
|
||||
_default: "['token_pocket','coinbase','metamask']"
|
||||
|
||||
@@ -12,6 +12,7 @@ The app instance could be customized by passing following variables to NodeJS en
|
||||
- [Homepage](ENVS.md#homepage)
|
||||
- [Sidebar](ENVS.md#sidebar)
|
||||
- [Footer](ENVS.md#footer)
|
||||
- [Favicon](ENVS.md#favicon)
|
||||
- [Views](ENVS.md#views)
|
||||
- [Block](ENVS.md#block-views)
|
||||
- [Misc](ENVS.md#misc)
|
||||
@@ -132,6 +133,17 @@ The app version shown in the footer is derived from build-time ENV variables `NE
|
||||
|
||||
|
||||
|
||||
### Favicon
|
||||
|
||||
By default, the app has generic favicon. You can override this behavior by providing the following variables. Hence, the favicon assets bundle will be generated at the container start time and will be used instead of default one.
|
||||
|
||||
| Variable | Type| Description | Compulsoriness | Default value | Example value |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| NEXT_PUBLIC_FAVICON_GENERATOR_API_KEY | `string` | RealFaviconGenerator [API key](https://realfavicongenerator.net/api/) | Required | - | `<your-secret>` |
|
||||
| NEXT_PUBLIC_FAVICON_MASTER_URL | `string` | - | - | `NEXT_PUBLIC_NETWORK_ICON` | `https://placekitten.com/180/180` |
|
||||
|
||||
|
||||
|
||||
### Views
|
||||
|
||||
#### Block views
|
||||
|
||||
@@ -25,7 +25,8 @@
|
||||
"test:pw:docker": "docker run --rm --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.35.1-focal ./playwright/run-tests.sh",
|
||||
"test:pw:ci": "yarn test:pw --project=$PW_PROJECT",
|
||||
"test:jest": "jest",
|
||||
"test:jest:watch": "jest --watch"
|
||||
"test:jest:watch": "jest --watch",
|
||||
"favicon:generate:dev": "./tools/scripts/favicon-generator.dev.sh"
|
||||
},
|
||||
"dependencies": {
|
||||
"@chakra-ui/react": "2.7.1",
|
||||
|
||||
@@ -30,6 +30,7 @@ class MyDocument extends Document {
|
||||
return (
|
||||
<Html lang="en">
|
||||
<Head>
|
||||
{ /* FONTS */ }
|
||||
<link
|
||||
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
|
||||
rel="stylesheet"
|
||||
@@ -38,10 +39,15 @@ class MyDocument extends Document {
|
||||
href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<link rel="icon" sizes="32x32" type="image/png" href="/static/favicon-32x32.png"/>
|
||||
<link rel="icon" sizes="16x16" type="image/png"href="/static/favicon-16x16.png"/>
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/static/apple-touch-icon.png"/>
|
||||
<link rel="mask-icon" href="/static/safari-pinned-tab.svg" color="#5bbad5"/>
|
||||
|
||||
{ /* FAVICON */ }
|
||||
<link rel="icon" href="/favicon/favicon.ico" sizes="48x48"/>
|
||||
<link rel="icon" sizes="32x32" type="image/png" href="/favicon/favicon-32x32.png"/>
|
||||
<link rel="icon" sizes="16x16" type="image/png"href="/favicon/favicon-16x16.png"/>
|
||||
<link rel="apple-touch-icon" href="/favicon/apple-touch-icon-180x180.png"/>
|
||||
<link rel="mask-icon" href="/favicon/safari-pinned-tab.svg"/>
|
||||
|
||||
{ /* OG TAGS */ }
|
||||
<meta property="og:title" content="Blockscout: A block explorer designed for a decentralized world."/>
|
||||
<meta
|
||||
property="og:description"
|
||||
|
||||
|
After Width: | Height: | Size: 736 B |
|
After Width: | Height: | Size: 833 B |
|
After Width: | Height: | Size: 791 B |
|
After Width: | Height: | Size: 515 B |
|
After Width: | Height: | Size: 561 B |
|
After Width: | Height: | Size: 791 B |
|
After Width: | Height: | Size: 383 B |
|
After Width: | Height: | Size: 439 B |
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,3 @@
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 180 180">
|
||||
<path d="M34.9 2.9c-2.9 2.9-2.9 3-2.9 15 0 6.8-.5 13.1-1.1 14.5-1.9 4-6.6 5.6-16.6 5.6C4.7 38 1.7 39.4.5 44.3.2 45.5.1 75.4.2 110.7l.3 64.2 2.3 2.3c2.1 2.1 3.3 2.3 14.6 2.6 14.8.4 17.9-.6 19.5-6.6.7-2.4 1.1-26.2 1.1-66.9V43.1l2.4-2.8c2.3-2.7 2.9-2.8 13.6-3.3 15-.7 15-.6 15-18.2v-13l-2.9-2.9C63.2 0 63.2 0 50.5 0S37.8 0 34.9 2.9zM111.8 1.5c-3.9 2.2-5.1 7.8-4.6 20.4.5 9.8.6 10.6 3.2 12.8 2.3 2 3.8 2.3 10.5 2.3 4.3 0 9.2.5 11 1.1 6.3 2.2 6.1.3 6.1 71.4v64.7l2.9 2.9c2.9 2.9 3 2.9 15.4 2.9 12 0 12.7-.1 15.6-2.6l3.1-2.6V42.9l-2.5-2.4c-2.2-2.2-3.2-2.5-10.5-2.5-8.1 0-14-1.6-15.6-4.1-.5-.8-1.1-7.6-1.4-15.1C144.3.3 144.6.6 127.2.2c-9.8-.1-13.3.1-15.4 1.3zM72.3 74.4l-2.8 2.4-.3 30.6-.3 30.5 3 3.3 2.9 3.3h13.1c12.9 0 13.1 0 15.8-2.8l2.8-2.7V76.8l-2.8-2.4C101 72.1 100.2 72 88 72s-13 .1-15.7 2.4z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 882 B |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 769 B |
|
Before Width: | Height: | Size: 914 B |
@@ -1,3 +0,0 @@
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 700">
|
||||
<path d="M149.7 1.1c-11.6 2.8-22.3 13.4-25.4 25-.3 1.3-.7 22-.9 45.9-.3 48.7-.5 50.7-7.3 59.6-4.5 6-10.2 10.1-17.2 12.3-4.6 1.5-9.6 1.8-35.4 1.9-16.5 0-32 .3-34.5.7-12.4 1.8-23.8 12-27.4 24.6C.1 176 0 200.6.2 425l.3 248.5 2.6 5.6c3.7 7.9 9 13.3 16.7 17.1l6.7 3.3h94l5.5-2.6c7.3-3.4 13.6-9.9 17.4-17.9l3.1-6.5.1-248c0-136.4.4-249.6.8-251.5 2.1-8.8 9.9-19.1 17.6-23 7.4-3.8 11.6-4.2 42.5-4.2 33.9.1 38.7-.6 47.1-6.3 5.3-3.7 9.9-9.3 13-16 1.7-3.7 1.9-7.7 2.1-47 .2-28.1-.1-44.9-.8-48.5-2.1-10.7-9.6-20.1-19.8-24.9L243.5.5l-45-.2c-24.7-.1-46.7.3-48.8.8zM444.2 1c-10 2.4-18.8 9.9-23.6 20l-3 6.5-.1 43.5c-.1 30.3.2 44.9 1 48 2.8 10.8 9.2 18.5 19.5 23.4l6.5 3.1 30.2.2c30.8.2 35.2.7 42.5 4.4 7.8 4 15.3 13.8 17.4 22.9.4 1.9.8 114.6.9 250.5.1 183.2.4 248 1.3 251 2.6 9.1 10.1 17.7 19.2 22.3l5.5 2.7 45.1.3c43.9.3 45.3.3 51.5-1.8 10.9-3.7 19.1-12.1 22.3-23 1.5-5 1.7-26.6 1.6-252.8 0-243.1 0-247.3-2-252.8-3.4-9.9-11.5-18-21.5-21.5-5.1-1.8-8.7-2-36.3-2.2-28.9-.3-31-.5-36.3-2.5-7.3-2.9-15.2-10.4-18.7-17.9l-2.7-5.8L564 73l-.5-46.5-2.6-5.6c-3.7-7.9-9-13.3-16.7-17.1L537.5.5l-45-.2c-24.7-.1-46.5.2-48.3.7zM296.5 280c-12.4 2.9-21.9 11.6-25.9 23.6-1.5 4.7-1.7 14.9-1.7 117.6 0 111.4 0 112.6 2.1 118.1 4.3 11.4 14.1 20 25.4 22.4 4.3.8 84 1 89.7.2 14.3-2.2 26.5-14.6 28.6-29.1 1-6.5.8-220.9-.1-225.8-1.8-8.9-8.2-17.9-16.1-22.6-9.1-5.3-10.6-5.4-56.5-5.3-23.4.1-43.8.5-45.5.9z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,19 @@
|
||||
secrets_file="./configs/envs/.env.secrets"
|
||||
favicon_folder="./public/favicon/"
|
||||
master_url="https://raw.githubusercontent.com/blockscout/frontend/main/tools/scripts/favicon.svg"
|
||||
|
||||
if [ ! -f "$secrets_file" ]; then
|
||||
echo "Error: File '$secrets_file' not found."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dotenv \
|
||||
-v MASTER_URL=$master_url \
|
||||
-e $secrets_file \
|
||||
-- bash -c 'cd ./deploy/tools/favicon-generator && ./script.sh'
|
||||
|
||||
if [ -d "$favicon_folder" ]; then
|
||||
rm -r "$favicon_folder"
|
||||
fi
|
||||
mkdir -p "$favicon_folder"
|
||||
cp -r ./deploy/tools/favicon-generator/output/* "$favicon_folder"
|
||||
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 30 30">
|
||||
<path fill="#2B6CB0" fill-rule="evenodd" d="M12.703 5.6a1.6 1.6 0 0 0-1.6-1.6H9.575a1.6 1.6 0 0 0-1.6 1.6v1.383a1.6 1.6 0 0 1-1.6 1.6H5.6a1.6 1.6 0 0 0-1.6 1.6V24.4A1.6 1.6 0 0 0 5.6 26h1.528a1.6 1.6 0 0 0 1.6-1.6V10.183a1.6 1.6 0 0 1 1.6-1.6h.775a1.6 1.6 0 0 0 1.6-1.6V5.6Zm9.487 0a1.6 1.6 0 0 0-1.6-1.6h-1.528a1.6 1.6 0 0 0-1.6 1.6v1.383a1.6 1.6 0 0 0 1.6 1.6h.61a1.6 1.6 0 0 1 1.6 1.6V24.4a1.6 1.6 0 0 0 1.6 1.6H24.4a1.6 1.6 0 0 0 1.6-1.6V10.183a1.6 1.6 0 0 0-1.6-1.6h-.61a1.6 1.6 0 0 1-1.6-1.6V5.6Zm-4.793 8.774a1.6 1.6 0 0 0-1.6-1.6h-1.528a1.6 1.6 0 0 0-1.6 1.6v5.705a1.6 1.6 0 0 0 1.6 1.6h1.528a1.6 1.6 0 0 0 1.6-1.6v-5.705Z" clip-rule="evenodd"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 736 B |