Various bug fixes and feature requests over the last couple years #225
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: Build binaries | |
on: | |
push: | |
branches: [ master ] | |
pull_request: | |
branches: [ master ] | |
workflow_dispatch: {} | |
jobs: | |
## Builds artifacts for 3 targets and uploads artifacts | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Setup .NET Core | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: 8.0.x | |
- name: Build Windows binary | |
run: dotnet publish --runtime win-x64 --configuration Release --output artifacts/win-x64 /p:PublishSingleFile=true Floofbot/Floofbot.csproj | |
- run: zip -j artifacts/win-x64/Floofbot_win-x64.zip artifacts/win-x64/Floofbot.exe | |
- uses: actions/upload-artifact@v2 | |
with: | |
name: build_artifacts | |
path: artifacts/win-x64/Floofbot_win-x64.zip | |
- name: Build Linux binary (full) | |
run: dotnet publish --runtime linux-x64 --configuration Release --output artifacts/linux-x64 /p:PublishSingleFile=true Floofbot/Floofbot.csproj | |
- run: tar -czf artifacts/linux-x64/Floofbot_linux-x64.tar.gz -C artifacts/linux-x64 Floofbot | |
- uses: actions/upload-artifact@v2 | |
with: | |
name: build_artifacts | |
path: artifacts/linux-x64/Floofbot_linux-x64.tar.gz | |
- name: Build Linux binary (musl) | |
run: dotnet publish --runtime linux-musl-x64 --configuration Release --output artifacts/linux-musl-x64 /p:PublishSingleFile=true Floofbot/Floofbot.csproj | |
- run: tar -czf artifacts/linux-musl-x64/Floofbot_linux-musl-x64.tar.gz -C artifacts/linux-musl-x64 Floofbot | |
- uses: actions/upload-artifact@v2 | |
with: | |
name: build_artifacts | |
path: artifacts/linux-musl-x64/Floofbot_linux-musl-x64.tar.gz | |
- name: Upload sample config | |
uses: actions/upload-artifact@v2 | |
with: | |
name: build_artifacts | |
path: Floofbot/config.yaml.sample | |
## Pulls build artifacts and creates a new release from them | |
release: | |
needs: build | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
runs-on: ubuntu-latest | |
outputs: | |
new_release_version: ${{ steps.get_new_release_version.outputs.new_version }} | |
steps: | |
- name: Get new release version | |
id: get_new_release_version | |
shell: bash | |
env: | |
ACTIONS_ALLOW_UNSECURE_COMMANDS: true | |
run: > | |
curl --silent https://api.github.com/repos/${{ github.repository }}/releases/latest | python3 -c | |
"import sys, json, datetime; | |
cur_version = json.load(sys.stdin).get('name', '0.0.0.0').rsplit('.', 1); | |
new_version = datetime.datetime.utcnow().strftime('%Y.%m.%d'), -1; | |
base, patch = new_version if new_version[0] != cur_version[0] else cur_version; | |
print('::set-env name=NEW_VERSION::{0}\n::set-output name=new_version::{0}'.format(f'{base}.{int(patch) + 1}'))" | |
- name: Download built artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
name: build_artifacts | |
- name: Create release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ env.NEW_VERSION }} | |
release_name: ${{ env.NEW_VERSION }} | |
body: "This release includes changes from the following commits:\n\n${{ join(github.event.commits.*.url, '\n') }}" | |
draft: false | |
prerelease: false | |
- name: Upload release assets (Windows) | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: Floofbot_win-x64.zip | |
asset_name: Floofbot_win-x64.zip | |
asset_content_type: application/zip | |
- name: Upload release assets (Linux) | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: Floofbot_linux-x64.tar.gz | |
asset_name: Floofbot_linux-x64.tar.gz | |
asset_content_type: application/gzip | |
- name: Upload release assets (Linux musl) | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: Floofbot_linux-musl-x64.tar.gz | |
asset_name: Floofbot_linux-musl-x64.tar.gz | |
asset_content_type: application/gzip | |
- name: Upload release assets (config file) | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: config.yaml.sample | |
asset_name: config.yaml.sample | |
asset_content_type: text/plain | |
## Uploads a new Docker image of the build. Requires the release step for the version variable | |
release_image: | |
needs: release | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository for Dockerfile and scripts | |
uses: actions/checkout@v2 | |
- name: Download built artifacts | |
uses: actions/download-artifact@v2 | |
with: | |
name: build_artifacts | |
- name: Extract build binary | |
shell: bash | |
run: 'mkdir -p artifacts/linux-musl-x64 && tar -C artifacts/linux-musl-x64 -xf Floofbot_linux-musl-x64.tar.gz' | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v1 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Docker build and push | |
uses: docker/build-push-action@v2 | |
with: | |
context: . | |
file: ./Dockerfile | |
platforms: linux/amd64 | |
push: true | |
build-args: floofbot_version=${{ needs.release.outputs.new_release_version }} | |
tags: | | |
ghcr.io/${{ github.repository_owner }}/floofbot:latest | |
ghcr.io/${{ github.repository_owner }}/floofbot:${{ needs.release.outputs.new_release_version }} |