Skip to content

Build Melee & publish GitHub Pages #54

Build Melee & publish GitHub Pages

Build Melee & publish GitHub Pages #54

Workflow file for this run

name: build
run-name: Build Melee & publish GitHub Pages
on: [push, pull_request]
env:
IMAGE_REPO: doldecomp/melee
permissions:
contents: read
id-token: write
packages: read
pages: write
jobs:
build-make:
name: Make
runs-on: ubuntu-latest
env:
REGISTRY: ghcr.io
OUTPUT: ${{ github.workspace }}/output
strategy:
matrix:
make_flags: ["GENERATE_MAP=1"]
fail-fast: false
steps:
- name: Get image name
env:
IMAGE_SUFFIX: build-linux:latest
run: |
echo "IMAGE=$IMAGE_REPO/$IMAGE_SUFFIX" >> $GITHUB_ENV
- name: Checkout Melee repository
uses: actions/checkout@v3
- name: Log into container registry
uses: docker/[email protected]
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Pull build image
run: docker pull "$REGISTRY/$IMAGE"
- name: Build Melee
env:
MAKE_FLAGS: ${{ matrix.make_flags }}
run: |
mkdir -p "$OUTPUT"
docker run --rm \
--user "$(id -u):$(id -g)" \
--volume "$PWD":/input:ro \
--volume "$OUTPUT:/output" \
--env MAKE_FLAGS="$MAKE_FLAGS" \
"$REGISTRY/$IMAGE"
- name: Upload map
if: matrix.make_flags == 'GENERATE_MAP=1'
uses: actions/upload-artifact@v3
with:
name: GALE01.map
path: ${{ env.OUTPUT }}/ssbm.us.1.2/GALE01.map
if-no-files-found: error
- name: Set step summary
if: matrix.make_flags == 'GENERATE_MAP=1'
run: |
printf "\`\`\`\n%s\n\`\`\`" "$(cat "$OUTPUT/PROGRESS.md")" \
>> $GITHUB_STEP_SUMMARY
build-ninja:
name: Ninja
runs-on: ubuntu-latest
if: github.repository == 'doldecomp/melee'
container: ghcr.io/doldecomp/build-melee:main
strategy:
fail-fast: false
matrix:
version: [GALE01]
mode: ["link", "diff"]
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 2
sparse-checkout: |
src
tools
config
- name: Git config
run: |
git config --global --add safe.directory "$GITHUB_WORKSPACE"
git config --global advice.detachedHead false
- name: Prepare
run: ln -s /orig .
- name: Build
run: |
set -eou pipefail
export RUST_LOG=error
mode='${{matrix.mode}}'
config_args='--compilers /compilers --max-errors 0 --verbose --version ${{matrix.version}}'
case "$mode" in
'link')
config_args="--map --require-protos $config_args"
;;
'diff') ;;
*) exit 1 ;;
esac
echo "$config_args" | xargs python configure.py
case "$mode" in
'link')
ninja || ninja diff
;;
'diff')
root='build/${{matrix.version}}'
expected="$root/expected-report.json"
actual="$root/actual-report.json"
changes="$root/changes-report.json"
ninja all_source
objdiff-cli report generate -o "$actual"
case '${{github.event_name}}' in
'pull_request')
git fetch origin HEAD
git checkout FETCH_HEAD
;;
'push')
git checkout 'HEAD^'
;;
*) exit 1 ;;
esac
ninja all_source
objdiff-cli report generate -o "$expected"
objdiff-cli report changes -o "$changes" "$expected" "$actual"
results="$(jq '
.units[]
| select(.functions[]
| { from: .from.fuzzy_match_percent,
to: .to.fuzzy_match_percent }
| .from == 100 and .to < .from)
| { (.name): ([.functions[] | .name]) }' \
"$changes")"
status="$(echo "$results" | jq -s 'if . == [] then 0 else 1 end')"
if [ "$status" -ne 0 ]; then
echo "::error::One or more functions were broken!"
echo "$results"
fi
exit "$status"
;;
*) exit 1 ;;
esac
- name: Upload progress
if: matrix.mode == 'link' && github.ref_name == github.event.repository.default_branch
continue-on-error: true
env:
PROGRESS_API_KEY: ${{secrets.PROGRESS_API_KEY}}
run: |
python tools/upload_progress.py \
-b 'https://progress.decomp.club/' \
-p melee \
-v ${{matrix.version}} \
'build/${{matrix.version}}/progress.json'
- name: Upload map
if: matrix.mode == 'link'
uses: actions/upload-artifact@v3
with:
name: ${{matrix.version}}_maps
path: build/${{matrix.version}}/**/*.MAP
check-issues:
name: Issues
runs-on: ubuntu-latest
env:
REGISTRY: ghcr.io
steps:
- name: Get image name
env:
IMAGE_SUFFIX: check-issues:latest
run: |
echo "IMAGE=$IMAGE_REPO/$IMAGE_SUFFIX" >> $GITHUB_ENV
- name: Checkout Melee repository
uses: actions/checkout@v3
- name: Log into container registry
uses: docker/[email protected]
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Pull build image
run: docker pull "$REGISTRY/$IMAGE"
- name: Check for code issues
run: |
docker run --rm \
--user "$(id -u):$(id -g)" \
--volume "$PWD:/input:ro" \
"$REGISTRY/$IMAGE"
gen-pages:
name: Generate pages
runs-on: ubuntu-latest
needs: build-ninja
env:
REGISTRY: ghcr.io
OUTPUT: ${{github.workspace}}/output
steps:
- name: Get image name
env:
IMAGE_SUFFIX: gen-pages:latest
run: |
echo "IMAGE=$IMAGE_REPO/$IMAGE_SUFFIX" >> $GITHUB_ENV
- name: Checkout Melee repository
uses: actions/checkout@v3
- name: Log into container registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Pull generator image
run: docker pull ${{ env.REGISTRY }}/${{ env.IMAGE }}
- name: Generate pages
run: |
mkdir -p "${{ env.OUTPUT }}"
docker run --rm \
--user "$(id -u):$(id -g)" \
--volume "$PWD:/input:ro" \
--volume "${{ env.OUTPUT }}:/output" \
${{ env.REGISTRY }}/${{ env.IMAGE }}
- name: Upload GitHub Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: ${{ env.OUTPUT }}
deploy-pages:
concurrency:
group: deploy
cancel-in-progress: false
name: Deploy to GitHub Pages
runs-on: ubuntu-latest
needs: gen-pages
if: github.ref_name == github.event.repository.default_branch
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Set up GitHub Pages
uses: actions/configure-pages@v4
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
build-nix:
name: Nix
runs-on: ubuntu-latest
if: github.repository == 'doldecomp/melee'
env:
REGISTRY: ghcr.io
IMAGE: doldecomp/build-melee:main
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
sparse-checkout: |
src
tools
config
.nix
- name: Log into container registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Grab Melee DOL
run: |
image="$REGISTRY/$IMAGE"
docker pull "$image"
container_id=$(docker create "$image")
docker cp "$container_id":/orig .
- uses: cachix/install-nix-action@v25
with:
nix_path: nixpkgs=channel:nixos-unstable
- uses: DeterminateSystems/magic-nix-cache-action@v2
- run: nix-build
- run: nix-shell --run "echo OK"