| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- name: Flatpak release job
- on:
- workflow_call:
- inputs:
- ryujinx_version:
- required: true
- type: string
- concurrency: flatpak-release
- jobs:
- release:
- runs-on: ubuntu-latest
- env:
- NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
- GIT_COMMITTER_NAME: "RyujinxBot"
- GIT_COMMITTER_EMAIL: "61127645+RyujinxBot@users.noreply.github.com"
- RYUJINX_PROJECT_FILE: "Ryujinx/Ryujinx.csproj"
- NUGET_SOURCES_DESTDIR: "nuget-sources"
- RYUJINX_VERSION: "${{ inputs.ryujinx_version }}"
- steps:
- - uses: actions/checkout@v3
- with:
- path: Ryujinx
- - uses: actions/setup-dotnet@v3
- with:
- global-json-file: Ryujinx/global.json
- - name: Get version info
- id: version_info
- working-directory: Ryujinx
- run: |
- echo "git_short_hash=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
- - uses: actions/checkout@v3
- with:
- repository: flathub/org.ryujinx.Ryujinx
- token: ${{ secrets.RYUJINX_BOT_PAT }}
- submodules: recursive
- path: flathub
- - name: Install dependencies
- run: python -m pip install PyYAML lxml
- - name: Restore Nuget packages
- run: dotnet restore Ryujinx/${{ env.RYUJINX_PROJECT_FILE }}
- - name: Generate nuget_sources.json
- shell: python
- run: |
- from pathlib import Path
- import base64
- import binascii
- import json
- import os
- sources = []
- for path in Path(os.environ['NUGET_PACKAGES']).glob('**/*.nupkg.sha512'):
- name = path.parent.parent.name
- version = path.parent.name
- filename = '{}.{}.nupkg'.format(name, version)
- url = 'https://api.nuget.org/v3-flatcontainer/{}/{}/{}'.format(name, version, filename)
- with path.open() as fp:
- sha512 = binascii.hexlify(base64.b64decode(fp.read())).decode('ascii')
- sources.append({
- 'type': 'file',
- 'url': url,
- 'sha512': sha512,
- 'dest': os.environ['NUGET_SOURCES_DESTDIR'],
- 'dest-filename': filename,
- })
- with open('flathub/nuget_sources.json', 'w') as fp:
- json.dump(sources, fp, indent=4)
- - name: Update flatpak metadata
- id: metadata
- env:
- RYUJINX_GIT_HASH: ${{ steps.version_info.outputs.git_short_hash }}
- shell: python
- run: |
- import hashlib
- import hmac
- import json
- import os
- import yaml
- from datetime import datetime
- from lxml import etree
- yaml_file = "flathub/org.ryujinx.Ryujinx.yml"
- xml_file = "flathub/org.ryujinx.Ryujinx.appdata.xml"
- with open(yaml_file, "r") as f:
- data = yaml.safe_load(f)
- for source in data["modules"][0]["sources"]:
- if type(source) is str:
- continue
- if (
- source["type"] == "git"
- and source["url"] == "https://github.com/Ryujinx/Ryujinx.git"
- ):
- source["commit"] = os.environ['RYUJINX_GIT_HASH']
- is_same_version = data["modules"][0]["build-options"]["env"]["RYUJINX_VERSION"] == os.environ['RYUJINX_VERSION']
- with open(os.environ['GITHUB_OUTPUT'], "a") as gh_out:
- if is_same_version:
- gh_out.write(f"commit_message=Retry update to {os.environ['RYUJINX_VERSION']}")
- else:
- gh_out.write(f"commit_message=Update to {os.environ['RYUJINX_VERSION']}")
- if not is_same_version:
- data["modules"][0]["build-options"]["env"]["RYUJINX_VERSION"] = os.environ['RYUJINX_VERSION']
- with open(yaml_file, "w") as f:
- yaml.safe_dump(data, f, sort_keys=False)
- parser = etree.XMLParser(remove_blank_text=True)
- tree = etree.parse(xml_file, parser)
- root = tree.getroot()
- releases = root.find("releases")
- element = etree.Element("release")
- element.set("version", os.environ['RYUJINX_VERSION'])
- element.set("date", datetime.now().date().isoformat())
- releases.insert(0, element)
- # Ensure 4 spaces
- etree.indent(root, space=" ")
- with open(xml_file, "wb") as f:
- f.write(
- etree.tostring(
- tree,
- pretty_print=True,
- encoding="UTF-8",
- doctype='<?xml version="1.0" encoding="UTF-8"?>',
- )
- )
- - name: Push flatpak update
- working-directory: flathub
- env:
- COMMIT_MESSAGE: ${{ steps.metadata.outputs.commit_message }}
- run: |
- git config user.name "${{ env.GIT_COMMITTER_NAME }}"
- git config user.email "${{ env.GIT_COMMITTER_EMAIL }}"
- git add .
- git commit -m "$COMMIT_MESSAGE"
- git push origin master
|