diff options
author | Patric Stout <truebrain@openttd.org> | 2020-12-08 13:49:22 +0100 |
---|---|---|
committer | Patric Stout <github@truebrain.nl> | 2020-12-15 15:46:39 +0100 |
commit | 93ef759a257a1aebf98b9a54fc6698b4732b05f7 (patch) | |
tree | f01d794947768b05b147d6d78d468f50050083de /.github/workflows/preview_build.yml | |
parent | 8fbf5bef60568cd4dcd56921c37be64b8234d9bb (diff) | |
download | openttd-93ef759a257a1aebf98b9a54fc6698b4732b05f7.tar.xz |
Add: [Actions] preview workflow, where PRs can be reviewed in the browser
When a developer attaches the "preview" label, a build is created
and published on https://preview.openttd.org/. After that, new
pushes to the PR are automatically build (as long as the "preview"
label exists).
If a non-developer attaches the "preview" label, it will be
removed.
Diffstat (limited to '.github/workflows/preview_build.yml')
-rw-r--r-- | .github/workflows/preview_build.yml | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/.github/workflows/preview_build.yml b/.github/workflows/preview_build.yml new file mode 100644 index 000000000..9aea890bc --- /dev/null +++ b/.github/workflows/preview_build.yml @@ -0,0 +1,133 @@ +name: Preview build + +on: + repository_dispatch: + types: + - Preview* + +jobs: + preview: + name: Build preview + + runs-on: ubuntu-20.04 + container: + # If you change this version, change the number in the cache step too. + image: emscripten/emsdk:2.0.10 + # uid=1001(runner) gid=121(docker) + options: -u 1001:121 + + steps: + - name: Update deployment status to in progress + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + deployment_id: ${{ github.event.client_payload.deployment_id }} + state: in_progress + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - name: Checkout + uses: actions/checkout@v2 + with: + ref: ${{ github.event.client_payload.sha }} + + - name: Name branch + run: | + name=$(echo "${{ github.event.client_payload.folder }}") + git checkout -b ${name} + + - name: Setup cache + uses: actions/cache@v2 + with: + path: /emsdk/upstream/emscripten/cache + key: 2.0.10-${{ runner.os }} + + - name: Build (host tools) + run: | + mkdir build-host + cd build-host + + echo "::group::CMake" + cmake .. -DOPTION_TOOLS_ONLY=ON + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + make -j$(nproc) tools + echo "::endgroup::" + + - name: Install GCC problem matcher + uses: ammaraskar/gcc-problem-matcher@master + + - name: Build + run: | + mkdir build + cd build + + echo "::group::CMake" + emcmake cmake .. \ + -DHOST_BINARY_DIR=../build-host \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + # EOF + echo "::endgroup::" + + echo "::group::Build" + echo "Running on $(nproc) cores" + emmake make -j$(nproc) + echo "::endgroup::" + + - name: Publish preview + run: | + # setuptools is missing in this Docker image, which breaks installing + # awscli. So we need to do this in two steps to recover sanity. + pip3 install setuptools + pip3 install awscli + + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.data s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.html s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.js s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + ~/.local/bin/aws s3 cp --only-show-errors build/openttd.wasm s3://${{ secrets.PREVIEW_S3_BUCKET }}/${{ github.event.client_payload.folder }}/ + + # Invalidate the cache of the CloudFront distribution + ~/.local/bin/aws cloudfront create-invalidation --distribution-id ${{ secrets.PREVIEW_CF_DISTRIBUTION_ID }} --paths "/${{ github.event.client_payload.folder }}/*" + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + + - name: Update deployment status to success + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + deployment_id: ${{ github.event.client_payload.deployment_id }} + state: success + environment_url: https://preview.openttd.org/${{ github.event.client_payload.folder }}/ + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} + + - if: failure() + name: Update deployment status to failure + uses: octokit/request-action@v2.x + with: + route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses + mediaType: | + previews: + - ant-man + - flash + owner: ${{ github.event.repository.owner.login }} + repo: ${{ github.event.repository.name }} + deployment_id: ${{ github.event.client_payload.deployment_id }} + state: failure + env: + GITHUB_TOKEN: ${{ secrets.PREVIEW_GITHUB_TOKEN }} |