Skip to content

Commit

Permalink
chore: test breaking workflow into separate jobs
Browse files Browse the repository at this point in the history
  • Loading branch information
Bilb committed Sep 19, 2024
1 parent 3a7326e commit c4c55b1
Show file tree
Hide file tree
Showing 3 changed files with 148 additions and 77 deletions.
187 changes: 116 additions & 71 deletions .github/workflows/check_for_crowdin_updates.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,50 +5,26 @@ on:
- cron: '0 0 * * 1' # Every Monday at 12:00 AM UTC, which is 10:00 AM Melbourne time (AEST)
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
fetch_convert_and_diff_translations:
fetch_translations:
runs-on: ubuntu-latest
steps:
- name: Checkout Repo Content
uses: actions/checkout@v4
with:
path: 'scripts'
# don't provide a branch (ref) so it uses the default for that event
- name: Checkout Android
uses: actions/checkout@v4
with:
repository: 'oxen-io/session-android'
path: 'android'
submodules: recursive
ref: 'release/1.20.0'
- name: Checkout Desktop
uses: actions/checkout@v4
with:
repository: 'oxen-io/session-desktop'
path: 'desktop'
ref: 'standardised_strings_qa_2'
- name: Checkout iOS
uses: actions/checkout@v4
with:
repository: 'oxen-io/session-ios'
path: 'ios'
ref: 'dev'
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: 3.8
cache: 'pip' # caching pip dependencies
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 17
cache: gradle

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Install Dependencies
shell: bash
run: |
pip install -r ${{ github.workspace }}/scripts/crowdin/requirements.txt
- name: Download Translations
Expand All @@ -62,53 +38,82 @@ jobs:
--glossary_id 407522 \
--concept_id 36 \
--skip-untranslated-strings
- name: Upload xliff artefacts
- name: Upload download artefacts
uses: actions/upload-artifact@v4
with:
name: session-xliff-artefact
path: "{{ github.workspace }}/raw_translations/*"
name: session-download-artefact
path: |
${{ github.workspace }}/raw_translations/*.xliff
${{ github.workspace }}/raw_translations/_non_translatable_strings.json
${{ github.workspace }}/raw_translations/_project_info.json
overwrite: true
if-no-files-found: warn
retention-days: 7

- name: Prepare Android Strings
run: |
python "${{ github.workspace }}/scripts/crowdin/generate_android_strings.py" \
"${{ github.workspace }}/raw_translations" \
"${{ github.workspace }}/android/libsession/src/main/res" \
"${{ github.workspace }}/android/libsession/src/main/java/org/session/libsession/utilities/NonTranslatableStringConstants.kt"
build_ios:
runs-on: ubuntu-latest
needs: [fetch_translations]
steps:
- name: Checkout Repo Content
uses: actions/checkout@v4
with:
path: 'scripts'
# don't provide a branch (ref) so it uses the default for that event
- name: Checkout iOS
uses: actions/checkout@v4
with:
repository: 'oxen-io/session-ios'
path: 'ios'
ref: 'dev'

- name: Print Android Strings
run: |
ls -l "${{ github.workspace }}/android/libsession/src/main/res/"
- name: Setup shared
uses: ./scripts/actions/setup_shared

- name: Prepare Desktop Strings
run: |
rm -rf ${{ github.workspace }}/desktop/_locales/*
python "${{ github.workspace }}/scripts/crowdin/generate_desktop_strings.py" \
"${{ github.workspace }}/raw_translations" \
"${{ github.workspace }}/desktop/_locales" \
"${{ github.workspace }}/desktop/ts/localization/constants.ts"
- name: Prepare iOS Strings
run: |
python "${{ github.workspace }}/scripts/crowdin/generate_ios_strings.py" \
"${{ github.workspace }}/raw_translations" \
"${{ github.workspace }}/ios/Session/Meta" \
"${{ github.workspace }}/ios/SessionUtilitiesKit/General/Constants.swift"
- name: Upload Android artefacts
- name: Upload iOS artefacts
uses: actions/upload-artifact@v4
with:
name: session-android-artefact
name: session-ios-artifact
path: |
${{ github.workspace }}/android/libsession/src/main/res/values*/strings.xml
${{ github.workspace }}/android/libsession/src/main/java/org/session/libsession/utilities/NonTranslatableStringConstants.kt
${{ github.workspace }}/ios/Session/Meta/Localizable.xcstrings
${{ github.workspace }}/ios/SessionUtilitiesKit/General/Constants.swift
overwrite: true
if-no-files-found: warn
retention-days: 7



build_desktop:
needs: [fetch_translations]
runs-on: ubuntu-latest
steps:
- name: Checkout Repo Content
uses: actions/checkout@v4
with:
path: 'scripts'
# don't provide a branch (ref) so it uses the default for that event
- name: Setup shared
uses: ./scripts/actions/setup_shared

- name: Checkout Desktop
uses: actions/checkout@v4
with:
repository: 'oxen-io/session-desktop'
path: 'desktop'
ref: 'standardised_strings_qa_2'

- name: Prepare Desktop Strings
run: |
rm -rf ${{ github.workspace }}/desktop/_locales/*
python "${{ github.workspace }}/scripts/crowdin/generate_desktop_strings.py" \
"${{ github.workspace }}/raw_translations" \
"${{ github.workspace }}/desktop/_locales" \
"${{ github.workspace }}/desktop/ts/localization/constants.ts"
- name: Upload Desktop artifacts
uses: actions/upload-artifact@v4
with:
Expand All @@ -119,20 +124,6 @@ jobs:
overwrite: true
if-no-files-found: warn
retention-days: 7
- name: Upload iOS artefacts
uses: actions/upload-artifact@v4
with:
name: session-ios-artifact
path: |
${{ github.workspace }}/ios/Session/Meta/Localizable.xcstrings
${{ github.workspace }}/ios/SessionUtilitiesKit/General/Constants.swift
overwrite: true
if-no-files-found: warn
retention-days: 7

- name: Validate strings for Android
run: ${{ github.workspace }}/android/gradlew :libsession:packageDebugResources

# It's easier to find what went wrong with some strings if we can get the files from the artefact upload step above.
# The job will still be marked as failed and no Pull Requests will be made.
- name: Prepare QA strings
Expand All @@ -151,10 +142,64 @@ jobs:
if-no-files-found: warn
retention-days: 7

build_android:
runs-on: ubuntu-latest
needs: [fetch_translations]

steps:
- name: Checkout Repo Content
uses: actions/checkout@v4
with:
path: 'scripts'
# don't provide a branch (ref) so it uses the default for that event
- name: Checkout Android
uses: actions/checkout@v4
with:
repository: 'oxen-io/session-android'
path: 'android'
submodules: recursive
ref: 'release/1.20.0'

- name: Setup shared
uses: ./scripts/actions/setup_shared

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 17
cache: gradle

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4

- name: Prepare Android Strings
run: |
python "${{ github.workspace }}/scripts/crowdin/generate_android_strings.py" \
"${{ github.workspace }}/raw_translations" \
"${{ github.workspace }}/android/libsession/src/main/res" \
"${{ github.workspace }}/android/libsession/src/main/java/org/session/libsession/utilities/NonTranslatableStringConstants.kt"
- name: Upload Android artefacts
uses: actions/upload-artifact@v4
with:
name: session-android-artefact
path: |
${{ github.workspace }}/android/libsession/src/main/res/values*/strings.xml
${{ github.workspace }}/android/libsession/src/main/java/org/session/libsession/utilities/NonTranslatableStringConstants.kt
overwrite: true
if-no-files-found: warn
retention-days: 7


- name: Validate strings for Android
run: cd ${{ github.workspace }}/android && ${{ github.workspace }}/android/gradlew app:mergePlayDebugResources # :libsession:packageDebugResources



make_prs:
needs: [build_android, build_ios, build_desktop]
runs-on: ubuntu-latest
steps:
# Not sure why yet, but uploading artefacts after creating the pull requests
# seems to only include a part of what should be in.
# As a dirty fix we upload the artefacts first, and then make the pull request
Expand Down
23 changes: 23 additions & 0 deletions actions/setup_shared/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: 'Setup for all'
description: "Setup shared for all jobs"
runs:
using: 'composite'
steps:
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: 3.8
cache: 'pip' # caching pip dependencies
- name: Install Dependencies
shell: bash
run: |
pip install -r ${{ github.workspace }}/scripts/crowdin/requirements.txt
- uses: actions/download-artifact@v4
with:
name: session-download-artefact
path: "${{ github.workspace }}/raw_translations"

- name: Display structure of downloaded files
shell: bash
run: ls ${{ github.workspace }}/raw_translations
15 changes: 9 additions & 6 deletions crowdin/generate_android_strings.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def parse_xliff(file_path):
root = tree.getroot()
namespace = {'ns': 'urn:oasis:names:tc:xliff:document:1.2'}
translations = {}

# Handle plural groups
for group in root.findall('.//ns:group[@restype="x-gettext-plurals"]', namespaces=namespace):
plural_forms = {}
Expand All @@ -42,22 +42,22 @@ def parse_xliff(file_path):
plural_forms[form] = target.text
if resname and plural_forms:
translations[resname] = plural_forms

# Handle non-plural translations
for trans_unit in root.findall('.//ns:trans-unit', namespaces=namespace):
resname = trans_unit.get('resname')
if resname not in translations: # This is not part of a plural group
target = trans_unit.find('ns:target', namespaces=namespace)
if target is not None and target.text:
translations[resname] = target.text

return translations

def convert_placeholders(text):
def repl(match):
var_name = match.group(1)
index = len(set(re.findall(r'\{([^}]+)\}', text[:match.start()]))) + 1

if var_name in NUMERIC_VARIABLES:
return f"%{index}$d"
else:
Expand Down Expand Up @@ -114,6 +114,9 @@ def convert_xliff_to_android_xml(input_file, output_dir, source_locale, locale,
translations = parse_xliff(input_file)
output_data = generate_android_xml(translations, app_name if is_source_language else None)

print("language_code",language_code)
print("region_code",region_code)

# Generate output files
language_code = locale.split('-')[0]
region_code = locale.split('-')[1] if '-' in locale else None
Expand All @@ -129,7 +132,7 @@ def convert_xliff_to_android_xml(input_file, output_dir, source_locale, locale,
file.write(output_data)

if region_code:
region_output_dir = os.path.join(output_dir, f'values-{language_code}-r{region_code}')
region_output_dir = os.path.join(output_dir, f'values-{language_code}-{"r" if len(region_code) > 2 else ""}{region_code}')
os.makedirs(region_output_dir, exist_ok=True)
region_output_file = os.path.join(region_output_dir, 'strings.xml')
with open(region_output_file, 'w', encoding='utf-8') as file:
Expand Down Expand Up @@ -179,7 +182,7 @@ def convert_all_files(input_directory):
project_details = {}
with open(project_info_file, 'r') as file:
project_details = json.load(file)

# Extract the language info and sort the target languages alphabetically by locale
source_language = project_details['data']['sourceLanguage']
target_languages = project_details['data']['targetLanguages']
Expand Down

0 comments on commit c4c55b1

Please sign in to comment.