Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
3405ada
update api doc
Feb 20, 2026
10729b2
Merge pull request #1 from RWS/temp_main
rwsdwatson Feb 20, 2026
e138c75
adapt to beta site
rwsdwatson Feb 20, 2026
8f4e4f1
update api doc
Feb 23, 2026
9a20e35
Merge pull request #3 from RWS/temp_main
rwsdwatson Feb 23, 2026
a6d0591
update api doc
Feb 23, 2026
31479d9
Merge pull request #4 from RWS/temp_main
rwsdwatson Feb 23, 2026
f2b0710
try a banner
rwsdwatson Feb 23, 2026
c97d745
fix banner
rwsdwatson Feb 23, 2026
092a751
new plugin format
rwsdwatson Feb 24, 2026
65a8876
need to update .md files
rwsdwatson Feb 24, 2026
7617a5e
spacing
rwsdwatson Feb 24, 2026
b0dec59
push pipeline
rwsdwatson Feb 26, 2026
36e7ee1
bump
rwsdwatson Feb 26, 2026
52cc53b
Merge pull request #10 from rwsdwatson/refreshapi
rwsdwatson Feb 26, 2026
ba08479
Correct article name
ealbu Mar 19, 2026
d192b24
How to update plugins to Trados Studio 2026 Release
ealbu Apr 14, 2026
0bed979
Merge pull request #12 from RWS/main_UpdateHowTo2026
ealbu Apr 14, 2026
2c6806c
Reverse "correct filename" commit
ealbu Apr 15, 2026
cc7f2c0
Update toc.yml for studio_2026 filename
rwsdwatson Apr 15, 2026
9a2dc8a
Merge pull request #14 from RWS/main_ReverseCommit
rwsdwatson Apr 15, 2026
fb79725
LG-53877 LG-53878 - review articles section of public documentation
cornea-robert May 14, 2026
ece9130
Merge pull request #16 from RWS/LG-53877_LG-53878
cornea-robert May 14, 2026
8584f62
LG-53877 LG-53879 - review core section (#18)
cornea-robert May 14, 2026
e70f38d
LG-53877 LG-53884 - review and update batch tasks (#20)
cornea-robert May 18, 2026
83aa2cc
LG-53877 LG-53886 - update release notes and index page (#22)
cornea-robert May 18, 2026
cb91f47
LG-53877 LG-53885 - update terminology (#24)
cornea-robert May 19, 2026
fe8a210
LG-53877 LG-53883 - update and review verification (#25)
cornea-robert May 19, 2026
517b53f
LG-53877 LG-53991 - translation memory api
cornea-robert May 26, 2026
89ad9f2
- merge with master
cornea-robert May 26, 2026
165996d
Merge pull request #27 from RWS/LG-53877_translationmemoryapi
BogdanCostisorRWS May 26, 2026
dc9b612
LG-53877 LG-53880 - update file type documentation (#28)
cornea-robert Jun 4, 2026
9abeb7b
LG-53877 LG-53882 - update integration (#30)
cornea-robert Jun 5, 2026
2e2ef3e
- update how to upgrade section (#32)
cornea-robert Jun 9, 2026
d74ac8b
LG-54170: Document terminology changes from : https://rws-dev.atlassi…
algrosu Jun 11, 2026
4bfff88
Document preview API changes (#36)
aapetean Jun 12, 2026
a72238c
LG-53881: Update / review Project Automation documentation pages (#38)
Rarmenciu Jun 25, 2026
3528763
update api doc (#40)
rwsdwatson Jul 1, 2026
3adad20
Merge branch 'main' into 2026Release
rwsdwatson Jul 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
36 changes: 36 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Copilot Instructions for Trados Studio API Documentation

## Project Overview
This is the **Trados Studio Public API documentation** repository, built with [DocFX](https://dotnet.github.io/docfx/). Content is authored in Markdown and structured via `toc.yml` files.

## Repository Structure
- `articles/` — Getting started guides, hints, and tips for Trados Studio plug-in development
- `apiconcepts/` — API concepts, guidelines, and API references (batch tasks, core, file type support, integration, project automation, terminology, translation memory, verification)
- `api/` — Auto-generated API reference metadata
- `Plugins/TradosStudioDocsPlugin/` — Custom DocFX plugin
- `RWSTemplate/` — DocFX site template
- `docfx.json` — DocFX configuration

## Writing Guidelines
- **Use active voice** over passive voice.
- **Use precise, strong verbs** — avoid weak verbs like "is", "occur", "happen".
- Write clear, concise sentences aimed at developers.
- Follow the detailed conventions in `writing_guidelines.md`.

## Variable Constructs
Use `Var:VariableName` to reference product names and versions. Do **not** hardcode product names. Available variables:
- `Var:ProductName` — e.g., Trados Studio
- `Var:ProductNameWithEdition` — e.g., Trados Studio 2021
- `Var:ProductVersion` — e.g., Studio16
- `Var:VersionNumber` — e.g., 16
- `Var:VisualStudioEdition` — e.g., the compatible Visual Studio edition

## Content Conventions
- New Markdown files must have a corresponding entry in the relevant `toc.yml`.
- Follow existing file and folder naming patterns (lowercase, descriptive names).
- Code samples should target the Trados Studio public API and use C#.
- Keep documentation consistent with existing articles in tone and structure.

## DocFX
- Build locally with `docfx docfx.json` to verify changes.
- The `docfx.json` file defines metadata sources (DLLs) and build configuration — avoid modifying unless necessary.
10 changes: 5 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ jobs:
ProductVersion: Studio18
VersionNumber: 18
VisualStudioEdition: 'Microsoft Visual Studio 2022'
PluginPackedPath : '%AppData%\Trados\Trados Studio\18\Plugins\Packages\'
PluginUnpackedPath: '%AppData%\Trados\Trados Studio\18\Plugins\Unpacked\'
InstallationFolder: 'C:\Program Files (x86)\Trados\Trados Studio\Studio18'
DefaultProjectsFolder: 'C:\Users\UserName\Documents\Studio 2024\Projects'
StudioDocumentsFolderName: 'Studio 2024'
PluginPackedPath : '%AppData%\Trados\Trados Studio\19\Plugins\Packages\'
PluginUnpackedPath: '%AppData%\Trados\Trados Studio\19\Plugins\Unpacked\'
InstallationFolder: 'C:\Program Files\Trados\Trados Studio\Studio19'
DefaultProjectsFolder: 'C:\Users\UserName\Documents\Studio 2026 Release\Projects'
StudioDocumentsFolderName: 'Studio 2026 Release'
AppSigningEmail : app-signing@sdl.com
ServerProductName: Trados GroupShare
ServerProductNameWithVersion: Trados GroupShare 2020 SR1
Expand Down
236 changes: 236 additions & 0 deletions .github/workflows/update-public-api-documentation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
name: Update Public API Documentation


on:
workflow_dispatch:
inputs:
projectName:
description: 'Select the project you want to generate docfx metadata'
required: true
default: 'TradosStudio'
type: choice
options:
- 'TradosStudio'
- 'Terminology'
Beta:
description: 'Beta version'
required: true
default: false
type: boolean
UpdateBranch:
description: 'Update Branch'
required: true
default: false
type: boolean
projectBranch:
description: 'Branch'
required: true
default: 'master'
type: string
targetBranch:
description: 'Target docfx branch'
required: true
default: 'main'
type: string
sourceBranch:
description: 'Source docfx branch'
required: true
default: 'main'
type: string

jobs:
push_docfx_api_to_github:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set pipeline ID variable
id: set-pipeline-id
shell: pwsh
run: |
$projectName = '${{ inputs.projectName }}'
Switch ($projectName) {
{$_ -eq "TradosStudio"} { $pipelineID = "1258" }
{$_ -eq "Terminology"} { $pipelineID = "2038" }
}
Write-Output "projectName: $projectName"
Write-Output "pipelineID: $pipelineID"
Write-Output "projectBranch: ${{ inputs.projectBranch }}"
echo "PIPELINE_ID=$pipelineID" >> $env:GITHUB_ENV

- name: Download binaries from Azure DevOps
shell: pwsh
env:
AZURE_DEVOPS_TOKEN: ${{ secrets.AZURE_DEVOPS_TOKEN }}
run: |
$binPath = "${{ github.workspace }}\Bin\Mixed Platforms\Release"
New-Item -ItemType Directory -Force -Path $binPath | Out-Null

$orgUrl = "https://dev.azure.com/RWS"
$project = "TradosStudio"
$pipelineID = $env:PIPELINE_ID
$branchName = "refs/heads/${{ inputs.projectBranch }}"
$artifactName = "binaries"

$headers = @{
Authorization = "Basic " + [Convert]::ToBase64String(
[Text.Encoding]::ASCII.GetBytes(":$env:AZURE_DEVOPS_TOKEN"))
}

# Fetch latest build from the branch (succeeded, partiallySucceeded, or failed)
$buildUrl = "$orgUrl/$project/_apis/build/builds" +
"?definitions=$pipelineID" +
"&branchName=$branchName" +
"&tagFilters=retail" +
"&resultFilter=succeeded,partiallySucceeded,failed" +
"&`$top=1&api-version=7.0"

$builds = Invoke-RestMethod -Uri $buildUrl -Headers $headers
if ($builds.count -eq 0) {
Write-Error "No builds found for pipeline $pipelineID on branch $branchName"
exit 1
}

$buildId = $builds.value[0].id
Write-Host "Using build ID: $buildId"

# Get artifact download URL
$artifactUrl = "$orgUrl/$project/_apis/build/builds/$buildId/artifacts" +
"?artifactName=$artifactName&api-version=7.0"
$artifact = Invoke-RestMethod -Uri $artifactUrl -Headers $headers
$downloadUrl = $artifact.resource.downloadUrl
Write-Host "Downloading artifact from: $downloadUrl"

$zipPath = "${{ github.workspace }}\binaries.zip"
Invoke-WebRequest -Uri $downloadUrl -Headers $headers -OutFile $zipPath

# Extract and copy to target bin path
$extractDir = "${{ github.workspace }}\binaries_extracted"
Expand-Archive -Path $zipPath -DestinationPath $extractDir -Force
# ADO container artifacts unzip into a subfolder named after the artifact
$innerDir = Join-Path $extractDir $artifactName
$sourceDir = if (Test-Path $innerDir) { $innerDir } else { $extractDir }
Copy-Item -Path "$sourceDir\*" -Destination $binPath -Recurse -Force
Write-Host "Binaries copied to: $binPath"

- name: Extract version information from SDL.Versioning.dll
shell: pwsh
run: |
$binPath = "${{ github.workspace }}\Bin\Mixed Platforms\Release"
$dllPath = Join-Path $binPath "sdl.versioning.dll"

if (Test-Path $dllPath) {
Write-Host "Loading SDL.Versioning.dll from: $dllPath"

$assembly = [System.Reflection.Assembly]::LoadFrom($dllPath)
$assemblyName = $assembly.GetName()
$version = $assemblyName.Version
$fileVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($dllPath).FileVersion
$productVersion = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($dllPath).ProductVersion

$metadata = @{
AssemblyVersion = $version.ToString()
FileVersion = $fileVersion
ProductVersion = $productVersion
FullName = $assemblyName.FullName
Timestamp = (Get-Item $dllPath).LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss")
}

$versionLabel = if ($productVersion) { $productVersion } else { $version.ToString() }
echo "VERSION_LABEL=$versionLabel" >> $env:GITHUB_ENV

$metadataJson = $metadata | ConvertTo-Json -Depth 10
$metadataPath = Join-Path $binPath "source-version-metadata.json"
$metadataJson | Out-File -FilePath $metadataPath -Encoding UTF8

Write-Host "Version metadata written to: $metadataPath"
Write-Host "Assembly Version: $($metadata.AssemblyVersion)"
Write-Host "File Version: $($metadata.FileVersion)"
Write-Host "Product Version: $($metadata.ProductVersion)"
} else {
Write-Warning "SDL.Versioning.dll not found at: $dllPath"
}

- name: Generate API documentation
shell: pwsh
run: |
dotnet tool update -g docfx
$projectName = '${{ inputs.projectName }}'
$docfxJsonPath = "docfx_project\$projectName\docfx.json"
docfx $docfxJsonPath

- name: Update the API documentation branch
if: ${{ inputs.UpdateBranch == true }}
shell: pwsh
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
run: |
$projectName = '${{ inputs.projectName }}'
$isBeta = '${{ inputs.Beta }}'

Switch ($projectName) {
{$_ -eq "TradosStudio"} { $repoName = "studio-api-docs" }
{$_ -eq "Terminology"} { $repoName = "multiterm-api-docs" }
}

if ($isBeta -eq 'true') {
$repoName = $repoName + "-beta"
}

$repoURL = "https://RWS:$env:GH_TOKEN@github.com/RWS/" + $repoName + ".git"
$featureBranch = '${{ inputs.targetBranch }}'
$sourceBranch = '${{ inputs.sourceBranch }}'
$metadataPath = "${{ github.workspace }}\Bin\Mixed Platforms\Release\source-version-metadata.json"
$prTitle = "Update generated documentation"

if (Test-Path $metadataPath) {
try {
$metadata = Get-Content -Path $metadataPath -Raw | ConvertFrom-Json
if ($metadata.ProductVersion) {
$prTitle = "Update generated documentation ($($metadata.ProductVersion))"
} elseif ($metadata.AssemblyVersion) {
$prTitle = "Update generated documentation ($($metadata.AssemblyVersion))"
}
} catch {
Write-Warning "Failed to read version metadata from $metadataPath"
}
} else {
Write-Warning "Version metadata file not found at: $metadataPath"
}

git clone $repoURL
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.sdl.com"

Set-Location $repoName
git checkout $sourceBranch

$git_response = git ls-remote --heads "$repoURL" "$featureBranch"

if ($null -eq $git_response) {
git checkout -b $featureBranch
} else {
git checkout -b "temp_$featureBranch"
}

git rm -r .\api\*
Copy-Item -Path "..\docfx_project\$projectName\api\" -Destination .\ -Force -Recurse

if (Test-Path $metadataPath) {
Copy-Item -Path $metadataPath -Destination .\source-version-metadata.json -Force
}

git add .\api\*.*
if (Test-Path .\source-version-metadata.json) {
git add .\source-version-metadata.json
}

git commit -a -m "update api doc"
git push $repoURL

if ($null -ne $git_response) {
gh pr create --title $prTitle --body "Update generated documentation" `
-H "temp_$featureBranch" -B $featureBranch
}

2 changes: 1 addition & 1 deletion writing_guidelines.md → .github/writing_guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Here's a short example for active voice:
> The cat sat on the mat.

* actor: The cat
* verd: sat
* verb: sat
* target: the mat

Here's a short example for passive voice:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@


<ItemGroup>
<PackageReference Include="Docfx.Plugins" Version="2.78.3" />
<PackageReference Include="Docfx.Common" Version="2.78.3" />
<PackageReference Include="Docfx.Plugins" Version="2.78.5" />
<PackageReference Include="Docfx.Common" Version="2.78.5" />
<PackageReference Include="System.Composition" Version="9.0.3" />
</ItemGroup>

Expand Down
2 changes: 1 addition & 1 deletion api/batchtasks/.manifest
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.#ctor": "Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.yml",
"Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.Cancel(System.Boolean)": "Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.yml",
"Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.ConfigureConverter(Sdl.ProjectAutomation.Core.ProjectFile,Sdl.FileTypeSupport.Framework.IntegrationApi.IMultiFileConverter)": "Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.yml",
"Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.CreateReport(System.String,System.String,System.String)": "Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.yml",
"Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.CreateReport(System.String,System.String,System.String,Sdl.ProjectAutomation.AutomaticTasks.LanguageDirection)": "Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.yml",
"Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.CreateReport(System.String,System.String,System.String,System.String)": "Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.yml",
"Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.GetSetting``1": "Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.yml",
"Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.GetWordCounter(Sdl.ProjectAutomation.Core.ProjectFile)": "Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.yml",
"Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.OnFileComplete(Sdl.ProjectAutomation.Core.ProjectFile,Sdl.FileTypeSupport.Framework.IntegrationApi.IMultiFileConverter)": "Sdl.ProjectAutomation.AutomaticTasks.AbstractFileContentProcessingAutomaticTask.yml",
Expand Down
Loading
Loading