156 lines
4.9 KiB
YAML
156 lines
4.9 KiB
YAML
|
# This is an example GitHub action that will build and publish the binaries and a Docker image
|
||
|
# You need to add the following secrets to your GitHub Repository or Organization to make this work
|
||
|
# - DOCKERHUB_USERNAME: The username of the DockerHub account. E.g. parity
|
||
|
# - DOCKERHUB_TOKEN: Access token for DockerHub, see https://docs.docker.com/docker-hub/access-tokens/.
|
||
|
# The following is set up as an environment variable below
|
||
|
# - DOCKER_REPO: The unique name of the DockerHub repository. E.g. parity/polkadot
|
||
|
|
||
|
name: Release
|
||
|
|
||
|
permissions:
|
||
|
contents: read
|
||
|
|
||
|
# Controls when the action will run.
|
||
|
on:
|
||
|
push:
|
||
|
# Triggers the workflow on tag push events
|
||
|
tags:
|
||
|
- v[0-9]+.*
|
||
|
|
||
|
env:
|
||
|
RUST_BACKTRACE: 1
|
||
|
CARGO_INCREMENTAL: 0
|
||
|
CARGO_NET_GIT_FETCH_WITH_CLI: true
|
||
|
CARGO_NET_RETRY: 10
|
||
|
RUSTFLAGS: -D warnings
|
||
|
RUSTUP_MAX_RETRIES: 10
|
||
|
CARGO_TERM_COLOR: always
|
||
|
# Set an environment variable (that can be overriden) for the Docker Repo
|
||
|
DOCKER_REPO: tripleight/node-template
|
||
|
|
||
|
defaults:
|
||
|
run:
|
||
|
shell: bash
|
||
|
|
||
|
|
||
|
jobs:
|
||
|
create-release:
|
||
|
# The type of runner that the job will run on
|
||
|
runs-on: ubuntu-22.04
|
||
|
timeout-minutes: 60
|
||
|
permissions:
|
||
|
contents: write
|
||
|
steps:
|
||
|
- uses: actions/checkout@v3
|
||
|
with:
|
||
|
persist-credentials: false
|
||
|
- uses: taiki-e/create-gh-release-action@v1
|
||
|
with:
|
||
|
title: $version
|
||
|
branch: main
|
||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||
|
|
||
|
upload-assets:
|
||
|
name: ${{ matrix.target }}
|
||
|
needs:
|
||
|
- create-release
|
||
|
strategy:
|
||
|
matrix:
|
||
|
# The list of architechture and OS to build for
|
||
|
# You can add or remove targets here if you want
|
||
|
#
|
||
|
# When updating this list, remember to update the target list in tests too
|
||
|
include:
|
||
|
# - target: aarch64-unknown-linux-gnu
|
||
|
- target: x86_64-unknown-linux-gnu
|
||
|
- target: aarch64-apple-darwin
|
||
|
os: macos-11
|
||
|
- target: x86_64-apple-darwin
|
||
|
os: macos-11
|
||
|
# - target: universal-apple-darwin
|
||
|
# os: macos-11
|
||
|
|
||
|
# The type of runner that the job will run on
|
||
|
# Runs on Ubuntu if other os is not specified above
|
||
|
runs-on: ${{ matrix.os || 'ubuntu-22.04' }}
|
||
|
timeout-minutes: 90
|
||
|
permissions:
|
||
|
contents: write
|
||
|
steps:
|
||
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||
|
- uses: actions/checkout@v3
|
||
|
with:
|
||
|
persist-credentials: false
|
||
|
|
||
|
- name: Install Rust
|
||
|
run: |
|
||
|
rustup update stable --no-self-update
|
||
|
rustup target add wasm32-unknown-unknown
|
||
|
|
||
|
- name: Install linux dependencies
|
||
|
if: (matrix.os == '' || startsWith(matrix.os, 'ubuntu'))
|
||
|
run: |
|
||
|
sudo apt-get -qq update
|
||
|
sudo apt-get install -y protobuf-compiler
|
||
|
|
||
|
- name: Install mac dependencies
|
||
|
if: startsWith(matrix.os, 'macos')
|
||
|
run: brew install protobuf
|
||
|
- uses: taiki-e/setup-cross-toolchain-action@v1
|
||
|
if: (matrix.os == '' || startsWith(matrix.os, 'ubuntu'))
|
||
|
with:
|
||
|
target: ${{ matrix.target }}
|
||
|
|
||
|
# Build and upload the binary to the new release
|
||
|
- uses: taiki-e/upload-rust-binary-action@v1
|
||
|
with:
|
||
|
bin: node-template
|
||
|
target: ${{ matrix.target }}
|
||
|
tar: all
|
||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||
|
|
||
|
- name: Upload x86_64 linux binary to workflow
|
||
|
if: (matrix.target == 'x86_64-unknown-linux-gnu')
|
||
|
uses: actions/upload-artifact@v3
|
||
|
with:
|
||
|
name: node-template
|
||
|
path: ${{ github.workspace }}/target/x86_64-unknown-linux-gnu/release/node-template
|
||
|
|
||
|
build-image:
|
||
|
# The type of runner that the job will run on
|
||
|
needs:
|
||
|
- upload-assets
|
||
|
runs-on: ubuntu-22.04
|
||
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||
|
steps:
|
||
|
# Login to Docker hub using the credentials stored in the repository secrets
|
||
|
- name: Log in to Docker Hub
|
||
|
uses: docker/login-action@v2.1.0
|
||
|
with:
|
||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||
|
|
||
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||
|
- name: Check out the repo
|
||
|
uses: actions/checkout@v3
|
||
|
|
||
|
# Download the binary from the previous job
|
||
|
- name: Download x86_64 linux binary
|
||
|
uses: actions/download-artifact@v3
|
||
|
with:
|
||
|
name: node-template
|
||
|
path: ${{ github.workspace }}
|
||
|
|
||
|
# Build and push 2 images, One with the version tag and the other with latest tag
|
||
|
- name: Build and push Docker images
|
||
|
uses: docker/build-push-action@v4
|
||
|
with:
|
||
|
context: .
|
||
|
file: ./Containerfile
|
||
|
push: true
|
||
|
build-args: |
|
||
|
DOCKER_REPO=${{ env.DOCKER_REPO }}
|
||
|
tags: |
|
||
|
${{ env.DOCKER_REPO }}:${{ github.ref_name }}
|
||
|
${{ env.DOCKER_REPO }}:latest
|