name: release
on:
workflow_dispatch:
inputs:
version:
description: 'version number'
required: true
env:
RELEASE_FILE: RELEASE.txt
jobs:
check:
name: check (${{ matrix.name }})
runs-on: ubuntu-latest
strategy:
matrix:
include:
- name: "default"
features: ""
steps:
- uses: actions/checkout@v1
- name: install toolchain
run: rustup default stable
- name: install tools
run: sudo apt-get install build-essential
- name: execute tests
run: cargo test ${{ matrix.features }}
- name: build program
run: cargo build ${{ matrix.features }}
tag:
if: github.ref == 'refs/heads/master'
needs: check
name: tag and release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: create release
id: create_release
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.event.inputs.version }}
release_name: ${{ github.event.inputs.version }}
body: |
Release ${{ github.event.inputs.version }}.
draft: false
prerelease: false
- run: printf ${{ steps.create_release.outputs.upload_url }} > ${{ env.RELEASE_FILE }}
- name: upload release data
uses: actions/upload-artifact@v1.0.0
with:
name: RELEASE
path: ${{ env.RELEASE_FILE }}
publish-cratesio:
needs: tag
name: crates.io
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: get version
id: get_version
run: echo ::set-output name=VERSION::$(git tag --points-at HEAD --sort -version:refname | head -1)
- name: install tools
run: |
sudo apt-get install build-essential
rustup default stable
pip install invoke
- name: publish
id: publish
run: |
invoke ci.update-version --version=${{ steps.get_version.outputs.VERSION }}
cargo login ${{ secrets.CRATES_IO_TOKEN }}
cargo publish --allow-dirty
publish-dockerhub:
needs: publish-cratesio
name: dockerhub
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: get version
id: get_version
run: echo ::set-output name=VERSION::$(git tag --points-at HEAD --sort -version:refname | head -1)
- name: publish
id: publish
run: |
printf ${{ secrets.DOCKERHUB }} | docker login --username replicadse --password-stdin
docker build -t replicadse/senile:latest -f docker/Dockerfile --build-arg VERSION=${{ steps.get_version.outputs.VERSION }} .
docker push replicadse/senile:latest
docker image tag replicadse/senile:latest replicadse/senile:${{ steps.get_version.outputs.VERSION }}
docker push replicadse/senile:${{ steps.get_version.outputs.VERSION }}
publish-archlinux-aur:
needs: publish-cratesio
name: archlinux aur
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: get version
id: get_version
run: echo ::set-output name=VERSION::$(git tag --points-at HEAD --sort -version:refname | head -1)
- uses: actions/setup-python@v2
with:
python-version: '3.7'
- name: install tools
run: |
rustup default stable
sudo apt-get install build-essential
pip install invoke
- name: prepare
id: prepare
run: |
invoke ci.update-version --version=${{ steps.get_version.outputs.VERSION }}
- name: publish
uses: KSXGitHub/github-actions-deploy-aur@v2.2.5
with:
pkgname: senile
pkgbuild: ./pkg/aur/PKGBUILD
commit_username: replicadse
commit_email: aw@voidpointergroup.com
ssh_private_key: ${{ secrets.AUR_SSH_PK }}
commit_message: update AUR package
publish-appimage:
needs: tag
name: publish appimage for ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
arch: x86_64
install: sudo apt-get install build-essential
steps:
- uses: actions/checkout@v1
- name: get version
id: get_version
run: echo ::set-output name=VERSION::$(git tag --points-at HEAD --sort -version:refname | head -1)
- name: download release id
uses: actions/download-artifact@v1.0.0
with:
name: RELEASE
- name: get release data
id: get_release_data
run: echo ::set-output name=upload_url::$(cat RELEASE/${{ env.RELEASE_FILE }})
- uses: actions/setup-python@v2
with:
python-version: '3.7'
- name: install tools
run: |
rustup default stable
${{ matrix.install }}
rustup target install ${{ matrix.target }}
pip install invoke
wget -O appimagetool.AppImage https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage
chmod +x ./appimagetool.AppImage
- name: build-${{ matrix.target }}
run: |
invoke ci.update-version --version=${{ steps.get_version.outputs.VERSION }}
cargo build --release --target ${{ matrix.target }}
cp ./target/${{ matrix.target }}/release/senile ./pkg/appimage/senile.AppDir/usr/bin/senile
cd ./pkg/appimage && ARCH=${{ matrix.arch }} ../../appimagetool.AppImage ./senile.AppDir && cd ../../
- name: zip
run: cd ./pkg/appimage && tar -zcvf AppImage.${{ matrix.arch }}.tar.gz senile-${{ matrix.arch }}.AppImage
- name: upload asset
uses: svenstaro/upload-release-action@v1-release
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ./pkg/appimage/AppImage.${{ matrix.arch }}.tar.gz
asset_name: AppImage.${{ matrix.arch }}.tar.gz
tag: ${{ steps.get_version.outputs.VERSION }}
overwrite: true
publish:
needs: tag
name: publish for ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: macos-latest
target: x86_64-apple-darwin
install: printf ok
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
install: sudo apt-get install build-essential
steps:
- uses: actions/checkout@v1
- name: get version
id: get_version
run: echo ::set-output name=VERSION::$(git tag --points-at HEAD --sort -version:refname | head -1)
- name: download release id
uses: actions/download-artifact@v1.0.0
with:
name: RELEASE
- name: get release data
id: get_release_data
run: echo ::set-output name=upload_url::$(cat RELEASE/${{ env.RELEASE_FILE }})
- uses: actions/setup-python@v2
with:
python-version: '3.7'
- name: install tools
run: |
rustup default stable
${{ matrix.install }}
rustup target install ${{ matrix.target }}
pip install invoke
- name: build-${{ matrix.target }}
run: |
invoke ci.update-version --version=${{ steps.get_version.outputs.VERSION }}
cargo build --release --target ${{ matrix.target }}
- name: zip
run: cd ./target/${{ matrix.target }}/release && tar -zcvf ${{ matrix.target }}.tar.gz senile
- name: upload asset
uses: svenstaro/upload-release-action@v1-release
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ./target/${{ matrix.target }}/release/${{ matrix.target }}.tar.gz
asset_name: ${{ matrix.target }}.tar.gz
tag: ${{ steps.get_version.outputs.VERSION }}
overwrite: true