Move public build infra entirely to GitHub

Summary:
As part of our release confidence effort, this replaces the flaky internal task that creates the tag, promotes it to a release and uploads the artifacts to it.

Instead, we do all this in one lengthy GitHub Action. There seems to be some duplication here but this is because of the unfortunate restriction GitHub Actions imposes to avoid recursive Actions. I.e. we cannot create a tag/release and have another, independent Action pick up from there to do the building and releasing.

The `passy/` references were necessary because existing Actions didn't quite what we wanted to:

- `tag-version-commit` expected the title of the commit to match the precise tag to create. However, we want to use a regex to *extract* from the "Flipper Release: vA.B.C". My fork allows specifying a grouping regex for that.
- `github-upload-release-artifacts-action` relied on being triggered by a tag. As described above, that's not possible with this setup. Instead, this takes an existing tag and attaches to it.

Reviewed By: nikoant

Differential Revision: D24627518

fbshipit-source-id: 8121df6aa7bd36bda28e0d3cb207a002cd127647
This commit is contained in:
Pascal Hartig
2020-11-05 05:14:58 -08:00
committed by Facebook GitHub Bot
parent 2930d78321
commit 7293a7ff55

137
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,137 @@
name: Release
on:
push:
branches:
- master
paths:
- 'desktop/package.json'
jobs:
release:
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.tag-version-commit.outputs.tag }}
steps:
- uses: actions/checkout@v2
- name: Tag version commit
id: tag-version-commit
uses: passy/tag-version-commit@master
with:
token: ${{ secrets.GITHUB_TOKEN }}
version_tag_prefix: 'v'
version_assertion_command: 'grep -q "\"version\": \"$version\"" desktop/package.json'
- name: Create release
if: ${{ steps.tag-version-commit.outputs.tag != '' }}
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.tag-version-commit.outputs.tag }}
release_name: ${{ steps.tag-version-commit.outputs.tag }}
body: |
See https://github.com/facebook/flipper/blob/master/desktop/static/CHANGELOG.md
for full notes.
draft: false
prerelease: false
build-mac:
runs-on: macos-latest
env:
desktop-directory: ./desktop
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Install
run: yarn
working-directory: ${{env.desktop-directory}}
- name: Build
run: yarn build --mac --mac-dmg
working-directory: ${{env.desktop-directory}}
- name: Upload
uses: actions/upload-artifact@v1
with:
name: 'Flipper-mac.dmg'
path: 'dist/Flipper-mac.dmg'
build-linux:
runs-on: ubuntu-latest
env:
desktop-directory: ./desktop
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Install
run: yarn
working-directory: ${{env.desktop-directory}}
- name: Build
run: yarn build --linux
working-directory: ${{env.desktop-directory}}
- name: Upload Linux
uses: actions/upload-artifact@v1
with:
name: 'Flipper-linux.zip'
path: 'dist/Flipper-linux.zip'
build-win:
runs-on: windows-latest
env:
desktop-directory: ./desktop
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Install
run: yarn
working-directory: ${{env.desktop-directory}}
- name: Build
run: yarn build --win
working-directory: ${{env.desktop-directory}}
- name: Upload Windows
uses: actions/upload-artifact@v1
with:
name: 'Flipper-win.zip'
path: 'dist/Flipper-win.zip'
publish:
runs-on: ubuntu-latest
needs:
- build-win
- build-linux
- build-mac
- release
steps:
- name: Download Mac
if: ${{ needs.release.outputs.tag != '' }}
uses: actions/download-artifact@v1
with:
name: 'Flipper-mac.dmg'
path: 'Flipper-mac.dmg'
- name: Download Linux
if: ${{ needs.release.outputs.tag != '' }}
uses: actions/download-artifact@v1
with:
name: 'Flipper-linux.zip'
path: 'Flipper-linux.zip'
- name: Download Windows
if: ${{ needs.release.outputs.tag != '' }}
uses: actions/download-artifact@v1
with:
name: 'Flipper-win.zip'
path: 'Flipper-win.zip'
- name: GitHub Upload Release Artifacts
if: ${{ needs.release.outputs.tag != '' }}
uses: passy/github-upload-release-artifacts-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
created_tag: ${{ needs.release.outputs.tag }}
args: Flipper-mac.dmg Flipper-linux.zip Flipper-win.zip