Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
72 changes: 72 additions & 0 deletions .github/workflows/cv-build-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Build and Test CV

on:
# Trigger on pull requests
pull_request:
branches: [ main, master ]

# Trigger on pushes to main/master (without creating release)
push:
branches: [ main, master ]

jobs:
test-build:
runs-on: ubuntu-latest

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

- name: Make scripts executable
run: |
chmod +x build_html.sh
chmod +x docker/scripts/build.sh
chmod +x docker/scripts/generate.sh

- name: Build Docker image
run: |
echo "🔄 Building Docker image..."
make image

- name: Test CV generation using Docker
run: |
echo "🔄 Testing CV generation with Docker..."
make pdf

- name: Validate file sizes
run: |
echo "📊 Generated file information:"

HTML_SIZE=$(stat -c%s "dist/cv.html")
PDF_SIZE=$(stat -c%s "dist/dzmitry_kalianchuk_cv.pdf")

echo "HTML size: $(numfmt --to=iec $HTML_SIZE) ($HTML_SIZE bytes)"
echo "PDF size: $(numfmt --to=iec $PDF_SIZE) ($PDF_SIZE bytes)"

# Basic validation - files should be larger than 1KB
if [ $HTML_SIZE -lt 1024 ]; then
echo "❌ Warning: HTML file seems too small"
exit 1
fi

if [ $PDF_SIZE -lt 5120 ]; then
echo "❌ Warning: PDF file seems too small"
exit 1
fi

echo "✅ File sizes look good"

- name: Upload build artifacts (for review)
uses: actions/upload-artifact@v4
with:
name: cv-build-test
path: |
dist/cv.html
dist/dzmitry_kalianchuk_cv.pdf
retention-days: 7

- name: Display success message
run: |
echo "🎉 CV build and test completed successfully!"
echo "📁 Generated files are available as artifacts"
echo "🔍 You can download them from the Actions run page to review"
165 changes: 165 additions & 0 deletions .github/workflows/cv-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
name: Generate CV and Create Release

on:
# Trigger on git tags (for versioned releases)
push:
tags:
- 'v*'
- 'release-*'

# Manual trigger from GitHub UI
workflow_dispatch:
inputs:
release_name:
description: 'Release name (optional)'
required: false
default: ''
prerelease:
description: 'Mark as pre-release'
required: false
default: false
type: boolean

# Trigger on changes to CV content (optional - uncomment if desired)
# push:
# branches: [ main, master ]
# paths:
# - 'content/**'
# - 'template/**'

jobs:
generate-cv:
runs-on: ubuntu-latest

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

- name: Make scripts executable
run: |
chmod +x build_html.sh
chmod +x docker/scripts/build.sh
chmod +x docker/scripts/generate.sh

- name: Build Docker image
run: make image

- name: Generate CV using Docker
run: make pdf

- name: Verify generated files
run: |
echo "Checking generated files..."
ls -la dist/

if [ ! -f "dist/cv.html" ]; then
echo "❌ Error: cv.html not found"
exit 1
fi

if [ ! -f "dist/dzmitry_kalianchuk_cv.pdf" ]; then
echo "❌ Error: dzmitry_kalianchuk_cv.pdf not found"
exit 1
fi

echo "✅ Both HTML and PDF files generated successfully"

- name: Get file sizes and info
run: |
echo "Generated files:"
echo "HTML: $(ls -lh dist/cv.html | awk '{print $5}')"
echo "PDF: $(ls -lh dist/dzmitry_kalianchuk_cv.pdf | awk '{print $5}')"

- name: Prepare release assets
run: |
# Create a release directory
mkdir -p release

# Copy files with descriptive names
cp dist/cv.html "release/CV-$(date +%Y%m%d).html"
cp dist/dzmitry_kalianchuk_cv.pdf "release/CV-$(date +%Y%m%d).pdf"

# Also keep original names for consistency
cp dist/cv.html release/
cp dist/dzmitry_kalianchuk_cv.pdf release/cv.pdf
cp dist/dzmitry_kalianchuk_cv.pdf release/dzmitry_kalianchuk_cv.pdf

echo "Release assets prepared:"
ls -la release/

- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: cv-files
path: |
release/
dist/
retention-days: 30

- name: Determine release info
id: release_info
run: |
# Set release name
if [ "${{ github.event.inputs.release_name }}" != "" ]; then
RELEASE_NAME="${{ github.event.inputs.release_name }}"
elif [ "${{ github.ref_type }}" == "tag" ]; then
RELEASE_NAME="${{ github.ref_name }}"
else
RELEASE_NAME="CV Release $(date +%Y-%m-%d)"
fi

echo "release_name=$RELEASE_NAME" >> $GITHUB_OUTPUT

# Set tag name (create one if triggered manually)
if [ "${{ github.ref_type }}" == "tag" ]; then
TAG_NAME="${{ github.ref_name }}"
else
TAG_NAME="cv-$(date +%Y%m%d-%H%M%S)"
fi

echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT

# Set prerelease flag
PRERELEASE="false"
if [ "${{ github.event.inputs.prerelease }}" == "true" ]; then
PRERELEASE="true"
fi

echo "prerelease=$PRERELEASE" >> $GITHUB_OUTPUT

echo "Release will be created with:"
echo " Name: $RELEASE_NAME"
echo " Tag: $TAG_NAME"
echo " Prerelease: $PRERELEASE"

- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.release_info.outputs.tag_name }}
release_name: ${{ steps.release_info.outputs.release_name }}
draft: false
prerelease: ${{ steps.release_info.outputs.prerelease }}
body: |
CV generated on: $(date +"%Y-%m-%d %H:%M:%S UTC")

- name: Upload PDF Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./dist/dzmitry_kalianchuk_cv.pdf
asset_name: dzmitry_kalianchuk_cv.pdf
asset_content_type: application/pdf

- name: Display release info
run: |
echo "🎉 Release created successfully!"
echo "📎 Release URL: ${{ steps.create_release.outputs.html_url }}"
echo "🔗 You can download the CV from the release page"
echo ""
echo "📁 Direct download link:"
echo " PDF: ${{ steps.create_release.outputs.html_url }}/download/dzmitry_kalianchuk_cv.pdf"
31 changes: 30 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,36 @@ node pdf/generate-pdf.js

- **Web preview**: Open `dist/cv.html` in any modern browser
- **Print preview**: Use browser's print function (Ctrl+P/Cmd+P) for A4 PDF layout
- **Direct PDF**: Generated files are saved in `dist/` directory## Maintenance Guide
- **Direct PDF**: Generated files are saved in `dist/` directory

## GitHub Actions Automation

This repository includes automated CV generation and release publishing using GitHub Actions.

### Creating Releases

**Method 1: Git Tags (Recommended)**
```bash
git tag v1.0
git push origin v1.0
```

**Method 2: Manual Trigger**
1. Go to **Actions** tab in your repository
2. Select "Generate CV and Create Release"
3. Click "Run workflow"

### What You Get

- **Automatic PDF generation** using your Docker setup
- **GitHub release** with downloadable `dzmitry_kalianchuk_cv.pdf`
- **Direct download link**: `https://github.com/USER/REPO/releases/latest/download/dzmitry_kalianchuk_cv.pdf`

### Testing

- **Pull requests** automatically test CV generation
- **All pushes** to main/master trigger build validation
- **Build artifacts** available for download from Actions tab## Maintenance Guide

### Updating Content

Expand Down