# GitHub Actions Snippets
Some useful configs for my beloved green badges in README.md, automatic deploy, and more.
Some useful configs for my beloved green badges in README.md, automatic deploy, and more.
The deploy.yaml for this website:
name: deploy
on:
push:
branches: [ main ]
workflow_dispatch:
# Allow one concurrent deployment
concurrency:
group: deploy
cancel-in-progress: true
jobs:
deploy:
runs-on: ubuntu-latest
environment: prod
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
- name: Set up Just
uses: extractions/setup-just@v3
- name: Deploy to xmit
run: just deploy
env:
XMIT_KEY: ${{ secrets.XMIT_TOKEN }}
The justfile for this website:
set dotenv-load := true
serve:
npx http-server public/ -o -p 8080
deploy:
npx @xmit.co/xmit $XMIT_DOMAIN public/
The deploy.yml for my Telegram-bot Ashley:
name: deploy
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Install SSH agent
run: which ssh-agent || ( apt-get install openssh-client -y )
- name: Deploy
run: |
eval `ssh-agent -s`
ssh-add <(echo "${{ secrets.SSH_PRIVATE_KEY }}")
mkdir -p ~/.ssh
echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
ssh -t ${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_ADDRESS}} "cd ${{ secrets.WORKING_DIR }} && git checkout main && git pull && source venv/bin/activate && pip install -r requirements.txt && sudo systemctl restart ashleybot.service"
name: validate
on:
push:
paths:
- '**.html'
pull_request:
paths:
- '**.html'
workflow_dispatch:
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: "Checkout code"
uses: actions/checkout@v4
- name: HTML5 Validator
uses: Cyb3r-Jak3/html5validator-action@master
with:
root: .
name: JSON check
on:
push:
paths:
- '**.json'
branches:
- main
pull_request:
paths:
- '**.json'
jobs:
check:
runs-on: ubuntu-latest
steps:
- name: "Checkout code"
uses: actions/checkout@v4
- name: json-syntax-check
uses: limitusus/json-syntax-check@v2
with:
pattern: "\\.json$"
name: tests
on:
push:
paths:
- '**/*.rs'
- 'Cargo.toml'
- '.github/workflows/tests.yml'
branches:
- main
pull_request:
paths:
- '**/*.rs'
- 'Cargo.toml'
- '.github/workflows/tests.yml'
workflow_dispatch:
env:
CARGO_TERM_COLOR: always
jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: "Checkout code"
uses: actions/checkout@v4
- name: "Install Rust toolchain"
uses: dtolnay/rust-toolchain@master
with:
profile: minimal
toolchain: stable
components: clippy,rustfmt
override: true
- name: "Fmt check"
run: cargo fmt --all -- --check
- name: "Run tests"
run: cargo test --all --no-fail-fast
- name: "Run clippy"
run: cargo clippy -- -D warnings -D clippy::pedantic -A clippy::cast_precision_loss -A clippy::cast_possible_truncation -A clippy::cast_possible_wrap -A clippy::cast_sign_loss -A clippy::cast_lossless -A clippy::module_name_repetitions -A clippy::unnecessary_box_returns --verbose --no-deps
This snippet will build project on Linux, Windows, and MacOS; automatically create a release, and upload archives with binaries to GitHub
The instruction tags: [ "v[0-9]+.*" ] will run it only on tags with semver-like name (e.g. v1.2.3)
name: release
permissions:
contents: write
on:
push:
tags:
- v[0-9]+.*
workflow_dispatch:
env:
GLOBAL_ENV_EXAMPLE:
jobs:
create-release:
runs-on: ubuntu-latest
steps:
- name: "Checkout code"
uses: actions/checkout@v4
- name: "Create release"
uses: taiki-e/create-gh-release-action@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
upload-assets:
needs: create-release
strategy:
fail-fast: false
matrix:
include:
- name: Windows
os: windows-2019
- name: Linux
os: ubuntu-latest
- name: OSX
os: macos-latest
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
steps:
- name: "Checkout code"
uses: actions/checkout@v4
- name: "Install Rust toolchain"
uses: dtolnay/rust-toolchain@master
with:
profile: minimal
toolchain: nightly
override: true
- name: "Install SDL2 (linux)"
if: runner.os == 'Linux'
run: |
sudo apt-get update -y -qq
sudo apt-get install libsdl2-dev
- name: "Install SDL2 (mac)"
if: runner.os == 'macOS'
run: |
HOMEBREW_NO_AUTO_UPDATE=yes HOMEBREW_NO_INSTALL_CLEANUP=yes brew install sdl2
- name: "Install SDL2 (windows)"
if: runner.os == 'Windows'
shell: powershell
run: |
Import-Module BitsTransfer
Start-BitsTransfer -Source "https://www.libsdl.org/release/SDL2-devel-2.0.22-VC.zip" -Destination SDL2.zip
Expand-Archive -Path SDL2.zip -Destination .
Get-ChildItem -Path SDL2-2.0.22/lib/x64/ -Recurse -File | Move-Item -Destination . -Force
- name: "Build and upload binary"
uses: taiki-e/upload-rust-binary-action@v1
with:
bin: midia
archive: $bin-$tag-${{ runner.os }}
token: ${{ secrets.GITHUB_TOKEN }}
include: LICENSE,README.md,data
leading_dir: true