Skip to content
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/workflows/build-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Deploy to Server

on:
workflow_dispatch:
push:
branches:
- ep2025

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set timestamp for build/deploy
run: echo "TIMESTAMP=$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV

- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
run_install: false

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"

- name: Install dependencies
run: make install

- name: Build the website
run: make build

- name: Set up SSH key
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.DEPLOY_SSH_KEY }}

- name: ssh keyscan
run: ssh-keyscan "static.europython.eu" > ~/.ssh/known_hosts

- name: Deploy to server
run: make deploy FORCE_DEPLOY=true
102 changes: 102 additions & 0 deletions .github/workflows/preview.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: Preview

on:
pull_request:

jobs:
preview:
name: Run preview
runs-on: ubuntu-latest
env:
PREVIEW_HOSTNAME: ep-preview.click
GITHUB_BRANCH_NAME: ${{ github.head_ref || github.ref_name }}

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set timestamp for build/deploy
run: echo "TIMESTAMP=$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV

- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
run_install: false

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"

- name: Install dependencies
run: make install

- name: Build the website
run: make build

- name: Set up SSH key
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.DEPLOY_SSH_KEY }}

- name: Get current branch name
run: |
BRANCH_NAME=$(make safe_branch BRANCH=$GITHUB_BRANCH_NAME)
echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV

- name: ssh keyscan
run: ssh-keyscan "static.europython.eu" > ~/.ssh/known_hosts

- name: Upload preview
run: make preview BRANCH=$GITHUB_BRANCH_NAME

- name: Update PR Comment
uses: actions/github-script@v6
if: github.event_name == 'pull_request'

with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
console.log("Hello world!");
const pr_id = ${{ github.event.number }};
console.log("PR Id %d", pr_id);

comments = await github.paginate(github.rest.issues.listComments, {
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: Number(pr_id)
})

const preview_identifier = "# Preview available"

let comment_id = null;
comments.forEach(comment => {
if(comment.body.indexOf(preview_identifier) >= 0) {
comment_id = comment.id;
}
});

const branch_name = process.env.BRANCH_NAME;
const url = "https://" + branch_name + "." + process.env.PREVIEW_HOSTNAME;
const timestamp = new Date().toISOString();
const header = "\n|Key|Value|\n|---|---|\n"
const body = preview_identifier + header + "|url|" + url + "|\n|last update|" + timestamp + "|";

if(comment_id > 0) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: comment_id,
body: body
});

} else {

await github.rest.issues.createComment({
issue_number: Number(pr_id),
owner: context.repo.owner,
repo: context.repo.repo,
body: body
});
}
67 changes: 57 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,32 @@
#
# Variables for remote host
# =========================
VPS_USER ?= static_content_user
VPS_HOST ?= static.europython.eu
VPS_PROD_PATH ?= /home/static_content_user/content/europython_websites/ep2025
VPS_PREVIEW_PATH ?= /home/static_content_user/content/previews
REMOTE_CMD=ssh $(VPS_USER)@$(VPS_HOST)

# Variables for build/deploy
# ==========================
export TIMESTAMP ?= $(shell date +%Y%m%d%H%M%S)
export GIT_VERSION ?= $(shell git rev-parse --short HEAD)

# Variables for deploy
# ====================
# Auto-detect and sanitize current git branch
BRANCH ?= $(shell git rev-parse --abbrev-ref HEAD)
# Replace "/" and other non-alphanumeric characters with "-"
SAFE_BRANCH := $(shell echo "$(BRANCH)" | sed 's/[^A-Za-z0-9._-]/-/g')
FORCE_DEPLOY ?= false

.PHONY: build deploy dev clean install


safe_branch:
@echo $(SAFE_BRANCH)

pre:
python -m pip install pre-commit ansible
pre-commit install
npm install -g pnpm

install:
Expand All @@ -9,15 +35,36 @@ install:
dev:
pnpm dev

clean:
git clean -fdX

check:
pnpm run astro check

build:
pnpm build
# TODO: update this to just `pnpm build` after resolving the astro-check warnings
pnpm run astro build
# NOTE: also let's find a better way to do this :D
find ./dist/_astro/ -iname '*.jpg' -delete

deploy:
$(if $(FORCE),$(if $(filter 1,$(FORCE)), \
@echo TO BE IMPLEMENTED, \
$(error FORCE must be set to 1)),$(error Use 'make deploy FORCE=1' to deploy))
preview: RELEASES_DIR = $(VPS_PREVIEW_PATH)/$(SAFE_BRANCH)/releases
preview: TARGET = $(RELEASES_DIR)/$(TIMESTAMP)
preview:
echo $(TARGET)
@echo "\n\n**** Deploying preview of a branch '$(BRANCH)' (safe: $(SAFE_BRANCH)) to $(TARGET)...\n\n"
$(REMOTE_CMD) "mkdir -p $(TARGET)"
rsync -avz --delete ./dist/ $(VPS_USER)@$(VPS_HOST):$(TARGET)/
$(REMOTE_CMD) "cd $(RELEASES_DIR) && ln -snf $(TIMESTAMP) current"
@echo "\n\n**** Preview complete.\n\n"

clean:
git clean -fdX

.PHONY: pre install dev build deploy clean
ifeq ($(FORCE_DEPLOY), true)
deploy: RELEASES_DIR = $(VPS_PROD_PATH)/$(SAFE_BRANCH)/releases
deploy: TARGET = $(RELEASES_DIR)/$(TIMESTAMP)
deploy:
@echo "\n\n**** Deploying branch '$(BRANCH)' (safe: $(SAFE_BRANCH)) to $(TARGET)...\n\n"
$(REMOTE_CMD) "mkdir -p $(TARGET)"
rsync -avz --delete ./dist/ $(VPS_USER)@$(VPS_HOST):$(TARGET)/
$(REMOTE_CMD) "cd $(RELEASES_DIR) && ln -snf $(TIMESTAMP) current"
@echo "\n\n**** Deployment complete.\n\n"
endif
5 changes: 5 additions & 0 deletions src/components/footer.astro
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ import { Fullbleed } from "./layout/fullbleed";

import links from "../data/links.json";
import { EPSLogo } from "./logo/eps-logo";

const buildTimestamp = import.meta.env.TIMESTAMP;
const gitVersion = import.meta.env.GIT_VERSION;
---

<Fullbleed className="bg-primary text-white">
Expand Down Expand Up @@ -89,5 +92,7 @@ import { EPSLogo } from "./logo/eps-logo";
</p>
</div>
</article>

<p class="mb-4" style="color: rgba(255, 255, 255, 0.4)">version: {gitVersion} @ {buildTimestamp}</p>
</footer>
</Fullbleed>
Loading