Files
ColdBreeze-chat-server-rust/.github/workflows/release.yml
T
2023-03-03 12:03:14 -05:00

194 lines
7.6 KiB
YAML

name: Release
on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
branches-ignore:
- "main"
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- build: linux
os: ubuntu-latest
rust: stable
target: x86_64-unknown-linux-musl
pre_install: sudo apt-get install -y rsync
- build: macos
os: macos-latest
rust: stable
target: x86_64-apple-darwin
pre_install: brew install rsync
# - build: macos-arm
# os: macos-latest
# rust: stable
# target: aarch64-apple-darwin
# cross: true
# pre_install: brew install rsync
- build: arm-v7
os: ubuntu-latest
rust: stable
target: armv7-unknown-linux-musleabihf
cross: true
pre_install: sudo apt-get install -y rsync
- build: aarch64
os: ubuntu-latest
rust: stable
target: aarch64-unknown-linux-musl
cross: true
pre_install: sudo apt-get install -y rsync
steps:
- name: Install SSH Key
uses: shimataro/ssh-key-action@v2
with:
key: ${{ secrets.NEW_GEN_ACTIONS_PRIVATE_KEY }}
known_hosts: ${{ secrets.VOCECHAT_COM_HOST }}
- name: Adding Known Hosts
run: ssh-keyscan -H "${{ secrets.VOCECHAT_COM_HOST }}" >> ~/.ssh/known_hosts
- name: Install rsync
run: ${{ matrix.pre_install }}
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
- uses: actions/checkout@v3
- uses: actions-rs/cargo@v1
with:
use-cross: true
command: build
args: --release --target ${{ matrix.target }}
- run: |
cp target/${{ matrix.target }}/release/vocechat-server ./vocechat-server
zip -r ./vocechat-server-${{ github.ref_name}}-${{ matrix.target }}.zip ./vocechat-server config
- name: Set AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.AWS_REGION }}
- if: matrix.target == 'x86_64-unknown-linux-musl'
run: |
docker -v
cp -rf target/${{ matrix.target }}/release/vocechat-server build/docker/
cd build/docker
cp -rf ../../config ./
docker login -u privoce -p ${{ secrets.DOCKER_PASSWORD }}
# build latest
docker build -t vocechat-server:latest .
docker tag vocechat-server:latest privoce/vocechat-server:latest
docker push privoce/vocechat-server:latest
# build version
docker build -t vocechat-server:${{ github.ref_name}} .
docker tag vocechat-server:${{ github.ref_name}} privoce/vocechat-server:${{ github.ref_name}}
docker push privoce/vocechat-server:${{ github.ref_name}}
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 384878476649.dkr.ecr.us-east-1.amazonaws.com
docker build --platform linux/amd64 -t 384878476649.dkr.ecr.us-east-1.amazonaws.com/vocechat-server:latest .
docker push 384878476649.dkr.ecr.us-east-1.amazonaws.com/vocechat-server:latest
docker build --platform linux/amd64 -t 384878476649.dkr.ecr.us-east-1.amazonaws.com/vocechat-server:${{ github.ref_name}} .
docker push 384878476649.dkr.ecr.us-east-1.amazonaws.com/vocechat-server:${{ github.ref_name}}
- if: matrix.target == 'aarch64-unknown-linux-musl'
run: |
docker -v
cp -rf target/${{ matrix.target }}/release/vocechat-server build/docker/
cd build/docker
cp -rf ../../config ./
docker login -u privoce -p ${{ secrets.DOCKER_PASSWORD }}
# build latest
sudo apt install -y qemu-user-static binfmt-support
sed -i "s/alpine/arm64v8\/alpine/ig" Dockerfile
sed -i "s/busybox/arm64v8\/busybox/ig" Dockerfile
docker buildx build -t vocechat-server:latest-arm64 --platform linux/arm64 .
docker tag vocechat-server:latest-arm64 privoce/vocechat-server:latest-arm64
docker push privoce/vocechat-server:latest-arm64
# build version
docker buildx build -t vocechat-server:${{ github.ref_name}}-arm64 --platform linux/arm64 .
docker tag vocechat-server:${{ github.ref_name}}-arm64 privoce/vocechat-server:${{ github.ref_name}}-arm64
docker push privoce/vocechat-server:${{ github.ref_name}}-arm64
- name: rsync to sh.voce.chat
run: |
rsync -av vocechat-server-${{ github.ref_name}}-${{ matrix.target }}.zip root@${{ secrets.VOCECHAT_COM_HOST }}:/home/wwwroot/sh.voce.chat/vocechat-server-${{ github.ref_name}}-${{ matrix.target }}.zip
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: vocechat-server-${{ github.ref_name}}-${{ matrix.target }}
path: vocechat-server-${{ github.ref_name}}-${{ matrix.target }}.zip
release:
runs-on: ubuntu-latest
needs: build
outputs:
upload_url: ${{ steps.create_release.outputs.upload_url }}
steps:
# - uses: dev-drprasad/delete-tag-and-release@v0.2.0
# with:
# delete_release: true
# tag_name: ${{ github.ref_name }}
# env:
# GITHUB_TOKEN: ${{ secrets.THE_GITHUB_TOKEN }}
- uses: actions/checkout@v3
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.THE_GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref_name }}
release_name: Release ${{ github.ref_name }}
draft: false
prerelease: false
add:
runs-on: ubuntu-latest
needs: [build, release]
strategy:
matrix:
include:
- build: linux
os: ubuntu-latest
rust: stable
target: x86_64-unknown-linux-musl
- build: macos
os: macos-latest
rust: stable
target: x86_64-apple-darwin
# - build: macos-arm
# os: macos-latest
# rust: stable
# target: aarch64-apple-darwin
# cross: true
# pre_install: brew install rsync
- build: arm-v7
os: ubuntu-latest
rust: stable
target: armv7-unknown-linux-musleabihf
cross: true
- build: aarch64
os: ubuntu-latest
rust: stable
target: aarch64-unknown-linux-musl
cross: true
steps:
- uses: actions/checkout@v2
- name: Download Artifact
uses: actions/download-artifact@v2
with:
name: vocechat-server-${{ github.ref_name}}-${{ matrix.target }}
- name: Upload Artifact to Release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.THE_GITHUB_TOKEN }}
with:
upload_url: ${{ needs.release.outputs.upload_url }}
asset_path: ./vocechat-server-${{ github.ref_name}}-${{ matrix.target }}.zip
asset_name: vocechat-server-${{ github.ref_name}}-${{ matrix.target }}.zip
asset_content_type: application/zip