updated dependencies #8
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "On Tag Deploy on GitHub" | |
env: | |
REPO_NAME: "nhentai_archivist" | |
RUN_TESTS: true | |
RUST_VERSION: "1.80" | |
on: | |
push: | |
tags: | |
# - "[0-9]+.[0-9]+.[0-9]+" | |
- "*" # execute every time tag is pushed | |
jobs: | |
initialisation: | |
name: "Initialisation" | |
env: | |
working-directory: ${{github.workspace}} | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: "NOW" | |
id: "now" | |
run: "echo \"NOW=$(date +'%Y-%m-%dT%H:%M:%S')\" >> $GITHUB_OUTPUT" # get datetime, save in NOW, push to output | |
- name: "Parse Tag" | |
id: "parse_tag" | |
run: "echo \"TAG=${GITHUB_REF#refs/tags/*}\" >> $GITHUB_OUTPUT" # parse tag because github.ref provides tag as f"refs/tags/{tag}" | |
shell: "bash" # must be bash even on windows, because command to apply value to variable works differently in powershell | |
- name: "TODAY" | |
id: "today" | |
run: "echo \"TODAY=$(date +'%Y-%m-%d')\" >> $GITHUB_OUTPUT" # get date, save in TODAY, push to output | |
outputs: # set step output as job output so other jobs can access | |
NOW: ${{steps.now.outputs.NOW}} | |
TAG: ${{steps.parse_tag.outputs.TAG}} | |
TODAY: ${{steps.today.outputs.TODAY}} | |
test: | |
name: "Run Tests" | |
env: | |
working-directory: ${{github.workspace}} | |
needs: ["initialisation"] | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: "Checkout Repository" | |
uses: "actions/checkout@v4" # makes repository structure available | |
- name: "Install Rust" | |
uses: "actions-rust-lang/setup-rust-toolchain@v1" | |
with: | |
toolchain: ${{env.RUST_VERSION}} | |
- name: "Check Project Version and Tag Match" | |
run: | | |
project_version=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version') | |
if [ "$project_version" == "${{needs.initialisation.outputs.TAG}}" ]; then | |
exit 0 | |
else | |
exit 1 | |
fi | |
- name: "Run Tests" | |
if: ${{env.RUN_TESTS == 'true'}} | |
run: "cargo test" | |
create_release: | |
name: "Create Release on GitHub" | |
env: | |
working-directory: ${{github.workspace}} | |
needs: ["initialisation", "test"] | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: "Create Release" | |
env: | |
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | |
id: "create_release" | |
uses: "actions/create-release@v1" # function that creates release | |
with: # parameters | |
body: # release text | |
draft: false | |
prerelease: false | |
release_name: "${{needs.initialisation.outputs.TODAY}} ${{env.REPO_NAME}} ${{needs.initialisation.outputs.TAG}}" # release title | |
tag_name: ${{github.ref}} # release tag | |
outputs: | |
github_release: ${{steps.create_release.outputs.upload_url}} | |
build_executables: | |
name: "Build Executable for ${{matrix.os}}" | |
env: | |
working-directory: ${{github.workspace}} | |
runs-on: "ubuntu-latest" | |
strategy: | |
matrix: | |
os: ["x86_64-unknown-linux-gnu", "x86_64-pc-windows-gnu"] | |
steps: | |
- name: "Checkout Repository" | |
uses: "actions/checkout@v4" # makes repository structure available | |
- name: "Install Rust" | |
uses: "actions-rust-lang/setup-rust-toolchain@v1" | |
with: | |
target: ${{matrix.os}} | |
toolchain: ${{env.RUST_VERSION}} | |
- name: "Install cross" # install cross for cross-compilation | |
run: "cargo install cross" | |
- name: "Compile" | |
run: "cross build --release --target ${{matrix.os}}" | |
- name: "Cache Executable" | |
if: ${{matrix.os != 'x86_64-pc-windows-gnu'}} | |
uses: "actions/cache/save@v4" | |
with: | |
key: ${{matrix.os}} | |
path: "./target/${{matrix.os}}/release/${{env.REPO_NAME}}" | |
- name: "Cache Executable" | |
if: ${{matrix.os == 'x86_64-pc-windows-gnu'}} | |
uses: "actions/cache/save@v4" | |
with: | |
key: ${{matrix.os}} | |
path: "./target/${{matrix.os}}/release/${{env.REPO_NAME}}.exe" # windows executable has .exe extension | |
build_docker_image: | |
name: "Build Docker Image" | |
env: | |
working-directory: ${{github.workspace}} | |
needs: ["initialisation"] | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: "Checkout Repository" | |
uses: "actions/checkout@v4" # makes repository structure available | |
- name: "Install Docker" | |
uses: "docker/setup-buildx-action@v1" | |
- name: "Create \"./target/\" Directory" | |
run: "mkdir -p \"./target/\"" | |
- name: "Compile" | |
run: "docker build -t \"ghcr.io/9-fs/${{env.REPO_NAME}}:${{needs.initialisation.outputs.TAG}}\" --no-cache ." | |
- name: "Save Docker Image" | |
run: "docker save \"ghcr.io/9-fs/${{env.REPO_NAME}}:${{needs.initialisation.outputs.TAG}}\" > \"./target/docker-image.tar\"" | |
- name: "Cache Docker Image" | |
uses: "actions/cache/save@v4" | |
with: | |
key: "docker" | |
path: "./target/docker-image.tar" | |
deploy_executables: | |
name: "Deploy Executable for ${{matrix.os}} on GitHub" | |
env: | |
working-directory: ${{github.workspace}} | |
needs: ["build_executables", "create_release", "initialisation", "test"] | |
runs-on: "ubuntu-latest" | |
strategy: | |
matrix: | |
os: ["x86_64-unknown-linux-gnu", "x86_64-pc-windows-gnu"] | |
steps: | |
- name: "Load Executable" | |
if: ${{matrix.os != 'x86_64-pc-windows-gnu'}} | |
uses: "actions/cache/restore@v4" | |
with: | |
key: ${{matrix.os}} | |
path: "./target/${{matrix.os}}/release/${{env.REPO_NAME}}" | |
- name: "Load Executable" | |
if: ${{matrix.os == 'x86_64-pc-windows-gnu'}} | |
uses: "actions/cache/restore@v4" | |
with: | |
key: ${{matrix.os}} | |
path: "./target/${{matrix.os}}/release/${{env.REPO_NAME}}.exe" | |
- name: "Attach Executable to Release" | |
if: ${{matrix.os != 'x86_64-pc-windows-gnu'}} | |
env: | |
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | |
uses: "actions/upload-release-asset@v1" | |
with: | |
asset_content_type: "application" | |
asset_name: "${{needs.initialisation.outputs.TODAY}} ${{env.REPO_NAME}} ${{needs.initialisation.outputs.TAG}} ${{matrix.os}}" | |
asset_path: "./target/${{matrix.os}}/release/${{env.REPO_NAME}}" | |
upload_url: ${{needs.create_release.outputs.github_release}} | |
- name: "Attach Executable to Release" | |
if: ${{matrix.os == 'x86_64-pc-windows-gnu'}} | |
env: | |
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | |
uses: "actions/upload-release-asset@v1" | |
with: | |
asset_content_type: "application" | |
asset_name: "${{needs.initialisation.outputs.TODAY}} ${{env.REPO_NAME}} ${{needs.initialisation.outputs.TAG}} ${{matrix.os}}.exe" | |
asset_path: "./target/${{matrix.os}}/release/${{env.REPO_NAME}}.exe" | |
upload_url: ${{needs.create_release.outputs.github_release}} | |
deploy_docker_image: | |
name: "Deploy Docker Image on GitHub" | |
env: | |
working-directory: ${{github.workspace}} | |
needs: ["build_docker_image", "create_release", "initialisation", "test"] | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: "Load Docker Image" | |
uses: "actions/cache/restore@v4" | |
with: | |
key: "docker" | |
path: "./target/docker-image.tar" | |
- name: "Attach Docker Image to Release" | |
env: | |
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} | |
uses: "actions/upload-release-asset@v1" | |
with: | |
asset_content_type: "application" | |
asset_name: "${{needs.initialisation.outputs.TODAY}} ${{env.REPO_NAME}} ${{needs.initialisation.outputs.TAG}} docker.tar" | |
asset_path: "./target/docker-image.tar" | |
upload_url: ${{needs.create_release.outputs.github_release}} | |
- name: "Load Docker Image" | |
run: "docker load < \"./target/docker-image.tar\"" | |
- name: "Add \"latest\" Tag to Docker Image" | |
run: "docker tag \"ghcr.io/9-fs/${{env.REPO_NAME}}:${{needs.initialisation.outputs.TAG}}\" \"ghcr.io/9-fs/${{env.REPO_NAME}}:latest\"" | |
- name: "Log In to GitHub Docker Registry" | |
run: "echo ${{secrets.GITHUB_TOKEN}} | docker login ghcr.io -u \"9-FS\" --password-stdin" | |
- name: "Push Docker Image to GitHub Docker Registry" | |
run: "docker push \"ghcr.io/9-fs/${{env.REPO_NAME}}:${{needs.initialisation.outputs.TAG}}\"" | |
- name: "Push Docker Image to GitHub Docker Registry" | |
run: "docker push \"ghcr.io/9-fs/${{env.REPO_NAME}}:latest\"" |