migrate to vercel; bump version
@@ -1,5 +0,0 @@
|
|||||||
timmypidashev.local {
|
|
||||||
tls internal
|
|
||||||
|
|
||||||
reverse_proxy timmypidashev.dev:4321
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
timmypidashev.dev {
|
|
||||||
tls pidashev.tim@gmail.com
|
|
||||||
|
|
||||||
reverse_proxy timmypidashev.dev:3000
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
FROM node:22-alpine
|
|
||||||
|
|
||||||
ARG CONTAINER_WEB_VERSION
|
|
||||||
ARG ENVIRONMENT
|
|
||||||
ARG BUILD_DATE
|
|
||||||
ARG GIT_COMMIT
|
|
||||||
|
|
||||||
RUN set -eux \
|
|
||||||
& apk add \
|
|
||||||
--no-cache \
|
|
||||||
nodejs \
|
|
||||||
curl
|
|
||||||
|
|
||||||
RUN curl -L https://unpkg.com/@pnpm/self-installer | node
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
RUN echo "PUBLIC_VERSION=${CONTAINER_WEB_VERSION}" > /app/.env && \
|
|
||||||
echo "PUBLIC_ENVIRONMENT=${ENVIRONMENT}" >> /app/.env && \
|
|
||||||
echo "PUBLIC_BUILD_DATE=${BUILD_DATE}" >> /app/.env && \
|
|
||||||
echo "PUBLIC_GIT_COMMIT=${GIT_COMMIT}" >> /app/.env
|
|
||||||
|
|
||||||
EXPOSE 3000
|
|
||||||
|
|
||||||
CMD ["pnpm", "run", "dev"]
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
# Stage 1: Build and install dependencies
|
|
||||||
FROM node:22-alpine AS builder
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Install necessary dependencies, including pnpm
|
|
||||||
RUN set -eux \
|
|
||||||
&& apk add --no-cache nodejs curl \
|
|
||||||
&& npm install -g pnpm
|
|
||||||
|
|
||||||
# Copy package files first (for better caching)
|
|
||||||
COPY package.json pnpm-lock.yaml ./
|
|
||||||
|
|
||||||
# Install dependencies
|
|
||||||
RUN pnpm install --frozen-lockfile
|
|
||||||
|
|
||||||
# Now copy the rest of your source code
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
# Set build arguments
|
|
||||||
ARG CONTAINER_WEB_VERSION
|
|
||||||
ARG ENVIRONMENT
|
|
||||||
ARG BUILD_DATE
|
|
||||||
ARG GIT_COMMIT
|
|
||||||
|
|
||||||
# Create .env file with build-time environment variables
|
|
||||||
RUN echo "PUBLIC_VERSION=${CONTAINER_WEB_VERSION}" > /app/.env && \
|
|
||||||
echo "PUBLIC_ENVIRONMENT=${ENVIRONMENT}" >> /app/.env && \
|
|
||||||
echo "PUBLIC_BUILD_DATE=${BUILD_DATE}" >> /app/.env && \
|
|
||||||
echo "PUBLIC_GIT_COMMIT=${GIT_COMMIT}" >> /app/.env
|
|
||||||
|
|
||||||
# Build the project
|
|
||||||
RUN pnpm run build
|
|
||||||
|
|
||||||
# Stage 2: Serve static files
|
|
||||||
FROM node:22-alpine
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
# Copy built files
|
|
||||||
COPY --from=builder /app/dist ./dist
|
|
||||||
COPY --from=builder /app/node_modules ./node_modules
|
|
||||||
COPY --from=builder /app/package.json ./package.json
|
|
||||||
|
|
||||||
# Expose port 3000
|
|
||||||
EXPOSE 3000
|
|
||||||
|
|
||||||
# Deployment command
|
|
||||||
CMD ["node", "./dist/server/entry.mjs"]
|
|
||||||
83
.github/scripts/deploy_release.sh
vendored
@@ -1,83 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# Set variables
|
|
||||||
BRANCH_NAME="$1"
|
|
||||||
COMMIT_HASH="$2"
|
|
||||||
GHCR_USERNAME="$3"
|
|
||||||
GHCR_TOKEN="$4"
|
|
||||||
DEPLOY_TYPE="$5"
|
|
||||||
REPO_OWNER="$6"
|
|
||||||
COMPOSE_FILE="$7"
|
|
||||||
CADDYFILE="$8"
|
|
||||||
MAKEFILE="$9"
|
|
||||||
|
|
||||||
# Echo out variable names and their content on single lines
|
|
||||||
echo "BRANCH_NAME: $BRANCH_NAME"
|
|
||||||
echo "COMMIT_HASH: $COMMIT_HASH"
|
|
||||||
echo "GHCR_USERNAME: $GHCR_USERNAME"
|
|
||||||
echo "DEPLOY_TYPE: $DEPLOY_TYPE"
|
|
||||||
echo "REPO_OWNER: $REPO_OWNER"
|
|
||||||
echo "COMPOSE_FILE: $COMPOSE_FILE"
|
|
||||||
echo "CADDYFILE: $CADDYFILE"
|
|
||||||
echo "MAKEFILE: $MAKEFILE"
|
|
||||||
|
|
||||||
# Set the staging directory
|
|
||||||
STAGING_DIR="/root/deployments/.staging-${COMMIT_HASH}"
|
|
||||||
|
|
||||||
# Set the tmux session name for release
|
|
||||||
TMUX_SESSION="deployment-release"
|
|
||||||
|
|
||||||
# Function to cleanup existing release deployment
|
|
||||||
cleanup_release_deployment() {
|
|
||||||
echo "Cleaning up existing release deployment..."
|
|
||||||
# Stop and remove all release containers
|
|
||||||
docker-compose -f "/root/deployments/release/docker-compose.yml" down -v 2>/dev/null
|
|
||||||
# Remove release images
|
|
||||||
docker rmi $(docker images "ghcr.io/$REPO_OWNER/*:release" -q) 2>/dev/null
|
|
||||||
# Kill release tmux session if it exists
|
|
||||||
tmux kill-session -t "$TMUX_SESSION" 2>/dev/null
|
|
||||||
# Remove release deployment directory
|
|
||||||
rm -rf /root/deployments/release
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to create deployment directory
|
|
||||||
create_deployment_directory() {
|
|
||||||
echo "Creating deployment directory..."
|
|
||||||
mkdir -p /root/deployments/release
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to pull Docker images
|
|
||||||
pull_docker_images() {
|
|
||||||
echo "Pulling Docker images..."
|
|
||||||
docker pull ghcr.io/$REPO_OWNER/web:release
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to copy and prepare files
|
|
||||||
copy_and_prepare_files() {
|
|
||||||
echo "Copying and preparing files..."
|
|
||||||
# Copy files preserving names and locations
|
|
||||||
install -D "$STAGING_DIR/$COMPOSE_FILE" "/root/deployments/release/$COMPOSE_FILE"
|
|
||||||
install -D "$STAGING_DIR/$CADDYFILE" "/root/deployments/release/$CADDYFILE"
|
|
||||||
install -D "$STAGING_DIR/$MAKEFILE" "/root/deployments/release/$MAKEFILE"
|
|
||||||
# Replace {$COMMIT_HASH} with $COMMIT_HASH in $CADDYFILE
|
|
||||||
sed -i "s/{\$COMMIT_HASH}/$COMMIT_HASH/g" "/root/deployments/release/$CADDYFILE"
|
|
||||||
# Replace {commit_hash} with $COMMIT_HASH in $COMPOSE_FILE
|
|
||||||
sed -i "s/{commit_hash}/$COMMIT_HASH/g" "/root/deployments/release/$COMPOSE_FILE"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Function to start the deployment
|
|
||||||
start_deployment() {
|
|
||||||
echo "Starting deployment..."
|
|
||||||
# Create new tmux session with specific name
|
|
||||||
tmux new-session -d -s "$TMUX_SESSION"
|
|
||||||
tmux send-keys -t "$TMUX_SESSION" "cd /root/deployments/release && make run release" Enter
|
|
||||||
}
|
|
||||||
|
|
||||||
# Main execution
|
|
||||||
cleanup_release_deployment
|
|
||||||
create_deployment_directory
|
|
||||||
copy_and_prepare_files
|
|
||||||
cd "/root/deployments/release"
|
|
||||||
pull_docker_images
|
|
||||||
start_deployment
|
|
||||||
echo "Release build $COMMIT_HASH deployed successfully!"
|
|
||||||
4
.gitmodules
vendored
@@ -1,3 +1,3 @@
|
|||||||
[submodule "src/public/scripts"]
|
[submodule "public/scripts"]
|
||||||
path = src/public/scripts
|
path = public/scripts
|
||||||
url = https://github.com/timmypidashev/scripts
|
url = https://github.com/timmypidashev/scripts
|
||||||
|
|||||||
186
Makefile
@@ -1,186 +0,0 @@
|
|||||||
PROJECT_NAME := "timmypidashev.dev"
|
|
||||||
PROJECT_AUTHORS := "Timothy Pidashev (timmypidashev) <pidashev.tim@gmail.com>"
|
|
||||||
PROJECT_VERSION := "v2.1.1"
|
|
||||||
PROJECT_LICENSE := "MIT"
|
|
||||||
PROJECT_SOURCES := "https://github.com/timmypidashev/web"
|
|
||||||
PROJECT_REGISTRY := "ghcr.io/timmypidashev"
|
|
||||||
PROJECT_ORGANIZATION := "org.opencontainers"
|
|
||||||
|
|
||||||
CONTAINER_WEB_NAME := "timmypidashev.dev"
|
|
||||||
CONTAINER_WEB_VERSION := "v2.1.1"
|
|
||||||
CONTAINER_WEB_LOCATION := "src/"
|
|
||||||
CONTAINER_WEB_DESCRIPTION := "My portfolio website!"
|
|
||||||
|
|
||||||
.DEFAULT_GOAL := help
|
|
||||||
.PHONY: watch run build push prune bump exec
|
|
||||||
.SILENT: watch run build push prune bump exec
|
|
||||||
|
|
||||||
help:
|
|
||||||
@echo "Available targets:"
|
|
||||||
@echo " run - Runs the docker compose file with the specified environment (local or release)"
|
|
||||||
@echo " build - Builds the specified docker image with the appropriate environment"
|
|
||||||
@echo " push - Pushes the built docker image to the registry"
|
|
||||||
@echo " prune - Removes all built and cached docker images and containers"
|
|
||||||
@echo " bump - Bumps the project and container versions"
|
|
||||||
|
|
||||||
run:
|
|
||||||
# Arguments:
|
|
||||||
# [environment]: 'local' or 'release'
|
|
||||||
#
|
|
||||||
# Explanation:
|
|
||||||
# * Runs the docker compose file with the specified environment(compose.local.yml, or compose.release.yml)
|
|
||||||
# * Passes all generated arguments to the compose file.
|
|
||||||
|
|
||||||
# Make sure we have been given proper arguments.
|
|
||||||
@if [ "$(word 2,$(MAKECMDGOALS))" = "local" ]; then \
|
|
||||||
echo "Running in local environment"; \
|
|
||||||
elif [ "$(word 2,$(MAKECMDGOALS))" = "release" ]; then \
|
|
||||||
echo "Running in release environment"; \
|
|
||||||
else \
|
|
||||||
echo "Invalid usage. Please use 'make run local' or 'make run release'"; \
|
|
||||||
exit 1; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
docker compose -f compose.$(word 2,$(MAKECMDGOALS)).yml up --remove-orphans
|
|
||||||
|
|
||||||
|
|
||||||
build:
|
|
||||||
# Arguments
|
|
||||||
# [container]: Build context(which container to build ['all' to build every container defined])
|
|
||||||
# [environment]: 'local' or 'release'
|
|
||||||
#
|
|
||||||
# Explanation:
|
|
||||||
# * Builds the specified docker image with the appropriate environment.
|
|
||||||
# * Passes all generated arguments to docker build-kit.
|
|
||||||
|
|
||||||
# Extract container and environment inputted.
|
|
||||||
$(eval INPUT_TARGET := $(word 2,$(MAKECMDGOALS)))
|
|
||||||
$(eval INPUT_CONTAINER := $(firstword $(subst :, ,$(INPUT_TARGET))))
|
|
||||||
$(eval INPUT_ENVIRONMENT := $(lastword $(subst :, ,$(INPUT_TARGET))))
|
|
||||||
|
|
||||||
# Call function container_build either through a for loop for each container
|
|
||||||
# if all is called, or singularly to build the container.
|
|
||||||
$(if $(filter $(strip $(INPUT_CONTAINER)),all), \
|
|
||||||
$(foreach container,$(containers),$(call container_build,$(container) $(INPUT_ENVIRONMENT))), \
|
|
||||||
$(call container_build,$(INPUT_CONTAINER) $(INPUT_ENVIRONMENT)))
|
|
||||||
|
|
||||||
push:
|
|
||||||
# Arguments
|
|
||||||
# [container]: Push context(which container to push to the registry)
|
|
||||||
# [version]: Container version to push.
|
|
||||||
#
|
|
||||||
# Explanation:
|
|
||||||
# * Pushes the specified container version to the registry defined in the user configuration.
|
|
||||||
|
|
||||||
# Extract container and version inputted.
|
|
||||||
$(eval INPUT_TARGET := $(word 2,$(MAKECMDGOALS)))
|
|
||||||
$(eval INPUT_CONTAINER := $(firstword $(subst :, ,$(INPUT_TARGET))))
|
|
||||||
$(eval INPUT_VERSION := $(lastword $(subst :, ,$(INPUT_TARGET))))
|
|
||||||
|
|
||||||
# Push the specified container version to the registry.
|
|
||||||
# NOTE: docker will complain if the container tag is invalid, no need to validate here.
|
|
||||||
@docker push $(PROJECT_REGISTRY)/$(INPUT_CONTAINER):$(INPUT_VERSION)
|
|
||||||
|
|
||||||
prune:
|
|
||||||
# Removes all built and cached docker images and containers.
|
|
||||||
|
|
||||||
bump:
|
|
||||||
# Arguments
|
|
||||||
# [container]: Bump context(which container version to bump)
|
|
||||||
# [semantic_type]: Semantic type context(major, minor, patch)
|
|
||||||
#
|
|
||||||
# Explanation:
|
|
||||||
# * Bumps the specified container version within the makefile config and the container's package.json.
|
|
||||||
# * Bumps the global project version in the makefile, and creates a new git tag with said version.
|
|
||||||
|
|
||||||
# Extract container and semantic_type inputted.
|
|
||||||
$(eval INPUT_TARGET := $(word 2,$(MAKECMDGOALS)))
|
|
||||||
$(eval INPUT_CONTAINER := $(firstword $(subst :, ,$(INPUT_TARGET))))
|
|
||||||
$(eval INPUT_SEMANTIC_TYPE := $(lastword $(subst :, ,$(INPUT_TARGET))))
|
|
||||||
|
|
||||||
# Extract old container and project versions.
|
|
||||||
$(eval OLD_CONTAINER_VERSION := $(subst v,,$(CONTAINER_$(shell echo $(INPUT_CONTAINER) | tr a-z A-Z)_VERSION)))
|
|
||||||
$(eval OLD_PROJECT_VERSION := $(subst v,,$(PROJECT_VERSION)))
|
|
||||||
|
|
||||||
# Pull docker semver becsause the normal command doesn't seem to work; also we don't need to worry about dependencies.
|
|
||||||
docker pull usvc/semver:latest
|
|
||||||
|
|
||||||
# Bump npm package.json file for selected container
|
|
||||||
cd $(call container_location,$(INPUT_CONTAINER)) && npm version $(shell docker run usvc/semver:latest bump $(INPUT_SEMANTIC_TYPE) $(OLD_CONTAINER_VERSION))
|
|
||||||
|
|
||||||
# Bump the git tag to match the new global version
|
|
||||||
git tag v$(shell docker run usvc/semver:latest bump $(INPUT_SEMANTIC_TYPE) $(OLD_PROJECT_VERSION))
|
|
||||||
|
|
||||||
# Bump the container version and global version in the Makefile
|
|
||||||
perl -pi -e 's/^PROJECT_VERSION\s*:=\s*\K.*/"v$(shell docker run usvc/semver:latest bump $(INPUT_SEMANTIC_TYPE) $(OLD_PROJECT_VERSION))"/ if /^PROJECT_VERSION\s*:=/' Makefile;
|
|
||||||
perl -pi -e 's/^CONTAINER_$(shell echo $(INPUT_CONTAINER) | tr a-z A-Z)_VERSION\s*:=\s*\K.*/"v$(shell docker run usvc/semver:latest bump $(INPUT_SEMANTIC_TYPE) $(OLD_CONTAINER_VERSION))"/ if /^CONTAINER_$(shell echo $(INPUT_CONTAINER) | tr a-z A-Z)_VERSION\s*:=/' Makefile;
|
|
||||||
|
|
||||||
# This function generates Docker build arguments based on variables defined in the Makefile.
|
|
||||||
# It extracts variable assignments, removes whitespace, and formats them as build arguments.
|
|
||||||
# Additionally, it appends any custom shell generated arguments defined below.
|
|
||||||
define args
|
|
||||||
$(shell \
|
|
||||||
grep -E '^[[:alnum:]_]+[[:space:]]*[:?]?[[:space:]]*=' $(MAKEFILE_LIST) | \
|
|
||||||
awk 'BEGIN {FS = ":="} { \
|
|
||||||
gsub(/^[[:space:]]+|[[:space:]]+$$/, "", $$2); \
|
|
||||||
gsub(/^/, "\x27", $$2); \
|
|
||||||
gsub(/$$/, "\x27", $$2); \
|
|
||||||
gsub(/[[:space:]]+/, "", $$1); \
|
|
||||||
gsub(":", "", $$1); \
|
|
||||||
printf "--build-arg %s=%s ", $$1, $$2 \
|
|
||||||
}') \
|
|
||||||
--build-arg BUILD_DATE='"$(shell date)"' \
|
|
||||||
--build-arg GIT_COMMIT='"$(shell git rev-parse HEAD)"'
|
|
||||||
endef
|
|
||||||
|
|
||||||
# This function generates labels based on variables defined in the Makefile.
|
|
||||||
# It extracts only the selected container variables and is used to echo this information
|
|
||||||
# to the docker buildx engine in the command line.
|
|
||||||
define labels
|
|
||||||
--label $(PROJECT_ORGANIZATION).image.title=$(CONTAINER_$(1)_NAME) \
|
|
||||||
--label $(PROJECT_ORGANIZATION).image.description=$(CONTAINER_$(1)_DESCRIPTION) \
|
|
||||||
--label $(PROJECT_ORGANIZATION).image.authors=$(PROJECT_AUTHORS) \
|
|
||||||
--label $(PROJECT_ORGANIZATION).image.url=$(PROJECT_SOURCES) \
|
|
||||||
--label $(PROJECT_ORGANIZATION).image.source=$(PROJECT_SOURCES)/$(CONTAINER_$(1)_LOCATION)
|
|
||||||
endef
|
|
||||||
|
|
||||||
# This function returns a list of container names defined in the Makefile.
|
|
||||||
# In order for this function to return a container, it needs to have this format: CONTAINER_%_NAME!
|
|
||||||
define containers
|
|
||||||
$(strip $(filter-out $(_NL),$(foreach var,$(.VARIABLES),$(if $(filter CONTAINER_%_NAME,$(var)),$(strip $($(var)))))))
|
|
||||||
endef
|
|
||||||
|
|
||||||
define container_build
|
|
||||||
$(eval CONTAINER := $(word 1,$1))
|
|
||||||
$(eval ENVIRONMENT := $(word 2,$1))
|
|
||||||
$(eval ARGS := $(shell echo $(args)))
|
|
||||||
$(eval VERSION := $(strip $(call container_version,$(CONTAINER))))
|
|
||||||
$(eval TAG := $(PROJECT_NAME):$(ENVIRONMENT))
|
|
||||||
|
|
||||||
@echo "Building container: $(CONTAINER)"
|
|
||||||
@echo "Environment: $(ENVIRONMENT)"
|
|
||||||
@echo "Version: $(VERSION)"
|
|
||||||
|
|
||||||
@if [ "$(strip $(ENVIRONMENT))" != "local" ] && [ "$(strip $(ENVIRONMENT))" != "release" ]; then \
|
|
||||||
echo "Invalid environment. Please specify 'local' or 'release'"; \
|
|
||||||
exit 1; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
$(if $(filter $(strip $(ENVIRONMENT)),release), \
|
|
||||||
$(eval TAG := $(PROJECT_REGISTRY)/$(PROJECT_NAME):$(VERSION)), \
|
|
||||||
)
|
|
||||||
|
|
||||||
docker buildx build --load -t $(TAG) -f .docker/Dockerfile.$(ENVIRONMENT) ./$(strip $(subst $(SPACE),,$(call container_location,$(CONTAINER))))/. $(ARGS) $(call labels,$(shell echo $(CONTAINER_NAME) | tr '[:lower:]' '[:upper:]')) --no-cache
|
|
||||||
endef
|
|
||||||
|
|
||||||
define container_location
|
|
||||||
$(strip $(eval CONTAINER_NAME := $(shell echo $(1) | tr '[:lower:]' '[:upper:]'))) \
|
|
||||||
$(CONTAINER_$(CONTAINER_NAME)_LOCATION)
|
|
||||||
endef
|
|
||||||
|
|
||||||
define container_version
|
|
||||||
$(strip $(eval CONTAINER_NAME := $(shell echo $(1) | tr '[:lower:]' '[:upper:]'))) \
|
|
||||||
$(if $(CONTAINER_$(CONTAINER_NAME)_VERSION), \
|
|
||||||
$(shell echo $(strip $(strip $(CONTAINER_$(CONTAINER_NAME)_VERSION))) | tr -d '[:space:]'), \
|
|
||||||
$(error Version data for container $(1) not found))
|
|
||||||
endef
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { defineConfig } from "astro/config";
|
import { defineConfig } from "astro/config";
|
||||||
import node from "@astrojs/node";
|
import vercel from "@astrojs/vercel";
|
||||||
import tailwind from "@astrojs/tailwind";
|
import tailwind from "@astrojs/tailwind";
|
||||||
import react from "@astrojs/react";
|
import react from "@astrojs/react";
|
||||||
import mdx from "@astrojs/mdx";
|
import mdx from "@astrojs/mdx";
|
||||||
@@ -10,13 +10,7 @@ import sitemap from "@astrojs/sitemap";
|
|||||||
// https://astro.build/config
|
// https://astro.build/config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
output: "server",
|
output: "server",
|
||||||
server: {
|
adapter: vercel(),
|
||||||
host: true,
|
|
||||||
port: 3000,
|
|
||||||
},
|
|
||||||
adapter: node({
|
|
||||||
mode: "standalone",
|
|
||||||
}),
|
|
||||||
site: "https://timmypidashev.dev",
|
site: "https://timmypidashev.dev",
|
||||||
build: {
|
build: {
|
||||||
// Enable build-time optimizations
|
// Enable build-time optimizations
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
services:
|
|
||||||
caddy:
|
|
||||||
container_name: caddy
|
|
||||||
image: caddy:latest
|
|
||||||
ports:
|
|
||||||
- 80:80
|
|
||||||
- 443:443
|
|
||||||
volumes:
|
|
||||||
- ./.caddy/Caddyfile.release:/etc/caddy/Caddyfile:rw
|
|
||||||
networks:
|
|
||||||
- proxy_network
|
|
||||||
depends_on:
|
|
||||||
- timmypidashev.dev
|
|
||||||
|
|
||||||
watchtower:
|
|
||||||
container_name: updates
|
|
||||||
image: containrrr/watchtower
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
- $HOME/.docker/config.json:/config.json
|
|
||||||
command: --interval 120 --cleanup --label-enable
|
|
||||||
|
|
||||||
timmypidashev.dev:
|
|
||||||
container_name: timmypidashev.dev
|
|
||||||
image: ghcr.io/timmypidashev/timmypidashev.dev:latest
|
|
||||||
networks:
|
|
||||||
- proxy_network
|
|
||||||
|
|
||||||
networks:
|
|
||||||
proxy_network:
|
|
||||||
name: proxy_network
|
|
||||||
external: true
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "src",
|
"name": "timmypidashev-web",
|
||||||
"version": "2.1.1",
|
"version": "3.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "astro dev --host",
|
"dev": "astro dev --host",
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/mdx": "^5.0.3",
|
"@astrojs/mdx": "^5.0.3",
|
||||||
"@astrojs/node": "^10.0.4",
|
"@astrojs/vercel": "^10.0.3",
|
||||||
"@astrojs/rss": "^4.0.18",
|
"@astrojs/rss": "^4.0.18",
|
||||||
"@astrojs/sitemap": "^3.7.2",
|
"@astrojs/sitemap": "^3.7.2",
|
||||||
"@giscus/react": "^3.1.0",
|
"@giscus/react": "^3.1.0",
|
||||||
528
src/pnpm-lock.yaml → pnpm-lock.yaml
generated
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 6.8 MiB After Width: | Height: | Size: 6.8 MiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 642 B After Width: | Height: | Size: 642 B |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 2.3 MiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
1
public/scripts
Submodule
@@ -1,11 +0,0 @@
|
|||||||
# Astro with Tailwind
|
|
||||||
|
|
||||||
```
|
|
||||||
npm init astro -- --template with-tailwindcss
|
|
||||||
```
|
|
||||||
|
|
||||||
[](https://stackblitz.com/github/withastro/astro/tree/latest/examples/with-tailwindcss)
|
|
||||||
|
|
||||||
Astro comes with [Tailwind](https://tailwindcss.com) support out of the box. This example showcases how to style your Astro project with Tailwind.
|
|
||||||
|
|
||||||
For complete setup instructions, please see our [Styling Guide](https://docs.astro.build/guides/styling#-tailwind).
|
|
||||||
@@ -8,7 +8,7 @@ interface FooterLink {
|
|||||||
export const Links: FooterLink[] = [
|
export const Links: FooterLink[] = [
|
||||||
{ id: 0, href: "mailto:contact@timmypidashev.dev", label: "Contact", color: "text-green" },
|
{ id: 0, href: "mailto:contact@timmypidashev.dev", label: "Contact", color: "text-green" },
|
||||||
{ id: 1, href: "https://github.com/timmypidashev", label: "Github", color: "text-yellow" },
|
{ id: 1, href: "https://github.com/timmypidashev", label: "Github", color: "text-yellow" },
|
||||||
{ id: 3, href: "https://www.linkedin.com/in/timothy-pidashev-4353812b8", label: "Linkedin", color: "text-blue" },
|
{ id: 3, href: "https://www.linkedin.com/in/timothy-pidashev-4353812b8", label: "LinkedIn", color: "text-blue" },
|
||||||
{ id: 4, href: "https://github.com/timmypidashev/web", label: "Source", color: "text-purple" },
|
{ id: 4, href: "https://github.com/timmypidashev/web", label: "Source", color: "text-purple" },
|
||||||
{ id: 5, href: "https://github.com/timmypidashev/web/releases", label: "v2", color: "text-aqua" }
|
{ id: 5, href: "https://github.com/timmypidashev/web/releases", label: "v3", color: "text-aqua" }
|
||||||
];
|
];
|
||||||