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 }}