diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index cc32f3d1..34f78ea8 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -17,7 +17,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: blacksmith-4vcpu-ubuntu-2404 steps: - name: Checkout repository uses: actions/checkout@v5 diff --git a/.github/workflows/electron.yml b/.github/workflows/electron.yml index 2fcd3d55..7c087e03 100644 --- a/.github/workflows/electron.yml +++ b/.github/workflows/electron.yml @@ -356,7 +356,7 @@ jobs: build-macos: runs-on: macos-latest - if: github.event.inputs.build_type == 'macos' || github.event.inputs.build_type == 'all' + if: (github.event.inputs.build_type == 'macos' || github.event.inputs.build_type == 'all') && github.event.inputs.artifact_destination != 'submit' needs: [] permissions: contents: write @@ -584,7 +584,7 @@ jobs: submit-to-chocolatey: runs-on: windows-latest - if: github.event.inputs.artifact_destination == 'submit' + if: github.event.inputs.artifact_destination == 'submit' && (github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'windows' || github.event.inputs.build_type == '') permissions: contents: read @@ -689,7 +689,7 @@ jobs: submit-to-flatpak: runs-on: ubuntu-latest - if: github.event.inputs.artifact_destination == 'submit' + if: github.event.inputs.artifact_destination == 'submit' && (github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'linux' || github.event.inputs.build_type == '') needs: [] permissions: contents: read @@ -776,7 +776,7 @@ jobs: submit-to-homebrew: runs-on: macos-latest - if: github.event.inputs.artifact_destination == 'submit' + if: github.event.inputs.artifact_destination == 'submit' && (github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'macos') needs: [] permissions: contents: read @@ -801,11 +801,20 @@ jobs: URL="https://github.com/Termix-SSH/Termix/releases/download/release-$VERSION-tag/$DMG_NAME" mkdir -p release_asset - PATH="release_asset/$DMG_NAME" + DOWNLOAD_PATH="release_asset/$DMG_NAME" echo "Downloading DMG from $URL" - curl -L -o "$PATH" "$URL" - CHECKSUM=$(shasum -a 256 "$PATH" | awk '{print $1}') + if command -v curl &> /dev/null; then + curl -L -o "$DOWNLOAD_PATH" "$URL" + elif command -v wget &> /dev/null; then + wget -O "$DOWNLOAD_PATH" "$URL" + else + echo "Neither curl nor wget is available, installing curl" + brew install curl + curl -L -o "$DOWNLOAD_PATH" "$URL" + fi + + CHECKSUM=$(shasum -a 256 "$DOWNLOAD_PATH" | awk '{print $1}') echo "dmg_name=$DMG_NAME" >> $GITHUB_OUTPUT echo "checksum=$CHECKSUM" >> $GITHUB_OUTPUT @@ -872,7 +881,7 @@ jobs: submit-to-testflight: runs-on: macos-latest - if: github.event.inputs.artifact_destination == 'submit' + if: github.event.inputs.artifact_destination == 'submit' && (github.event.inputs.build_type == 'all' || github.event.inputs.build_type == 'macos') needs: [] permissions: contents: write @@ -977,7 +986,7 @@ jobs: - name: Deploy to App Store Connect (TestFlight) if: steps.check_asc_creds.outputs.has_credentials == 'true' run: | - PKG_FILE=$(find artifact-mas -name "*.pkg" -type f | head -n 1) + PKG_FILE=$(find release -name "termix_macos_universal_mas.pkg" -type f | head -n 1) if [ -z "$PKG_FILE" ]; then echo "PKG file not found, exiting." exit 1 diff --git a/.github/workflows/openapi.yml b/.github/workflows/openapi.yml new file mode 100644 index 00000000..5ecdd866 --- /dev/null +++ b/.github/workflows/openapi.yml @@ -0,0 +1,32 @@ +name: Generate OpenAPI Specification + +on: + workflow_dispatch: + +jobs: + generate-openapi: + name: Generate OpenAPI JSON + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Generate OpenAPI specification + run: npm run generate:openapi + + - name: Upload OpenAPI artifact + uses: actions/upload-artifact@v4 + with: + name: openapi-spec + path: openapi.json + retention-days: 90 diff --git a/.github/workflows/translate.yml b/.github/workflows/translate.yml deleted file mode 100644 index 7c9db568..00000000 --- a/.github/workflows/translate.yml +++ /dev/null @@ -1,437 +0,0 @@ -name: Auto Translate - -on: - workflow_dispatch: - -permissions: - contents: write - pull-requests: write - -jobs: - translate-zh: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t zh --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-zh - path: src/locales/zh.json - continue-on-error: true - - translate-ru: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ru --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-ru - path: src/locales/ru.json - continue-on-error: true - - translate-pt: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t pt --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-pt - path: src/locales/pt.json - continue-on-error: true - - translate-fr: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t fr --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-fr - path: src/locales/fr.json - continue-on-error: true - - translate-es: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t es --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-es - path: src/locales/es.json - continue-on-error: true - - translate-de: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t de --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-de - path: src/locales/de.json - continue-on-error: true - - translate-hi: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t hi --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-hi - path: src/locales/hi.json - continue-on-error: true - - translate-bn: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t bn --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-bn - path: src/locales/bn.json - continue-on-error: true - - translate-ja: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ja --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-ja - path: src/locales/ja.json - continue-on-error: true - - translate-vi: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t vi --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-vi - path: src/locales/vi.json - continue-on-error: true - - translate-tr: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t tr --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-tr - path: src/locales/tr.json - continue-on-error: true - - translate-ko: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ko --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-ko - path: src/locales/ko.json - continue-on-error: true - - translate-it: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t it --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-it - path: src/locales/it.json - continue-on-error: true - - translate-he: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t he --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-he - path: src/locales/he.json - continue-on-error: true - - translate-ar: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ar --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-ar - path: src/locales/ar.json - continue-on-error: true - - translate-pl: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t pl --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-pl - path: src/locales/pl.json - continue-on-error: true - - translate-nl: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t nl --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-nl - path: src/locales/nl.json - continue-on-error: true - - translate-sv: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t sv --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-sv - path: src/locales/sv.json - continue-on-error: true - - translate-id: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t id --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-id - path: src/locales/id.json - continue-on-error: true - - translate-th: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t th --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-th - path: src/locales/th.json - continue-on-error: true - - translate-uk: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t uk --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-uk - path: src/locales/uk.json - continue-on-error: true - - translate-cs: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t cs --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-cs - path: src/locales/cs.json - continue-on-error: true - - translate-ro: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t ro --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-ro - path: src/locales/ro.json - continue-on-error: true - - translate-el: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t el --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-el - path: src/locales/el.json - continue-on-error: true - - translate-nb: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: "20" - - run: npx i18n-auto-translation -k ${{ secrets.GOOGLE_TRANSLATE_API_KEY }} -d "src/locales" -f en -t nb --maxLinesPerRequest 1 - - uses: actions/upload-artifact@v4 - with: - name: translations-nb - path: src/locales/nb.json - continue-on-error: true - - create-pr: - needs: - [ - translate-zh, - translate-ru, - translate-pt, - translate-fr, - translate-es, - translate-de, - translate-hi, - translate-bn, - translate-ja, - translate-vi, - translate-tr, - translate-ko, - translate-it, - translate-he, - translate-ar, - translate-pl, - translate-nl, - translate-sv, - translate-id, - translate-th, - translate-uk, - translate-cs, - translate-ro, - translate-el, - translate-nb, - ] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - token: ${{ secrets.GHCR_TOKEN }} - - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: translations-temp - - - name: Move translations to src/locales - run: | - cp translations-temp/translations-zh/zh.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-ru/ru.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-pt/pt.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-fr/fr.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-es/es.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-de/de.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-hi/hi.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-bn/bn.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-ja/ja.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-vi/vi.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-tr/tr.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-ko/ko.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-it/it.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-he/he.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-ar/ar.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-pl/pl.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-nl/nl.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-sv/sv.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-id/id.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-th/th.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-uk/uk.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-cs/cs.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-ro/ro.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-el/el.json src/locales/ 2>/dev/null || true - cp translations-temp/translations-nb/nb.json src/locales/ 2>/dev/null || true - rm -rf translations-temp - - - name: Create Pull Request - uses: peter-evans/create-pull-request@v6 - with: - token: ${{ secrets.GHCR_TOKEN }} - commit-message: "chore: auto-translate to multiple languages" - branch: translations-update - delete-branch: true - title: "chore: Update translations for all languages" diff --git a/README.md b/README.md index 9ddf04d6..0ee5ccc8 100644 --- a/README.md +++ b/README.md @@ -16,17 +16,6 @@ Achieved on September 1st, 2025
-#### Top Technologies - -[](#) -[](#) -[](#) -[](#) -[](#) -[](#) -[](#) -[](#) -