Paste your Azure Pipelines YAML into the left textbox,
then use the "Process YAML" button to generate GitHub Actions YAML

This migration has approximately ~90% accuracy, depending on the YAML tasks.
For tasks unable to be migrated, a comment is added to the results
Azure DevOps Pipeline YAML
GitHub Actions YAML
#Note: the 'AZURE_SP' secret is required to be added into GitHub Secrets. See this blog post for details: https://samlearnsazure.blog/2019/12/13/github-actions/
on:
  push:
    branches:
    - main
  pull-request:
    branches:
    - '*'
env:
  buildConfiguration: Release
  buildPlatform: Any CPU
jobs:
  Build_Stage_Build:
    name: Build job
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - name: 'Copy environment ARM template files to: ${{ github.workspace }}'
      run: Copy '${{ github.workspace }}\MyProject\MyProject.ARMTemplates/**\*' '${{ github.workspace }}\ARMTemplates'
    - name: Test dotnet code projects
      run: dotnet test MyProject/MyProject.Tests/MyProject.Tests.csproj --configuration ${{ env.buildConfiguration }}
    - name: Publish dotnet core projects
      run: dotnet publish MyProject/MyProject.Web/MyProject.Web.csproj --configuration ${{ env.buildConfiguration }} --output ${{ github.workspace }}
    - name: Publish dotnet core functional tests project
      run: dotnet publish MyProject/MyProject.FunctionalTests/MyProject.FunctionalTests.csproj --configuration ${{ env.buildConfiguration }} --output ${{ github.workspace }}/FunctionalTests
    - name: 'Copy Selenium Files to: ${{ github.workspace }}/FunctionalTests/MyProject.FunctionalTests'
      run: Copy 'MyProject/MyProject.FunctionalTests/bin/${{ env.buildConfiguration }}/netcoreapp3.0/*chromedriver.exe*' '${{ github.workspace }}/FunctionalTests/MyProject.FunctionalTests'
    - name: Publish Artifact
      uses: actions/upload-artifact@v2
      with:
        path: ${{ github.workspace }}
  Deploy_Stage_Deploy:
    name: Deploy job
    runs-on: ubuntu-latest
    env:
      AppSettings.Environment: data
      ArmTemplateResourceGroupLocation: eu
      ResourceGroupName: MyProjectRG
      WebsiteName: myproject-web
    if: (success() && (github.ref == 'refs/heads/main'))
    steps:
    - uses: actions/checkout@v2
    - # "Note: the 'AZURE_SP' secret is required to be added into GitHub Secrets. See this blog post for details: https://samlearnsazure.blog/2019/12/13/github-actions/"
      name: Azure Login
      uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_SP }}
    - name: Download the build artifacts
      uses: actions/download-artifact@v2
      with:
        name: drop
        path: ${{ github.workspace }}
    - name: Deploy ARM Template to resource group
      uses: Azure/cli@v1.0.0
      with:
        inlineScript: az deployment group create --resource-group ${{ env.ResourceGroupName }} --template-file ${{ github.workspace }}/drop/ARMTemplates/azuredeploy.json --parameters  ${{ github.workspace }}/drop/ARMTemplates/azuredeploy.parameters.json -environment ${{ env.AppSettings.Environment }} -locationShort ${{ env.ArmTemplateResourceGroupLocation }}
    - name: 'Azure App Service Deploy: web site'
      uses: Azure/webapps-deploy@v2
      with:
        app-name: ${{ env.WebsiteName }}
        package: ${{ github.workspace }}/drop/MyProject.Web.zip
        slot-name: staging
    - name: Run functional smoke tests on website
      run: |
        $vsTestConsoleExe = "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Extensions\TestPlatform\vstest.console.exe"
        $targetTestDll = "**\MyProject.FunctionalTests\MyProject.FunctionalTests.dll
        "
        $testRunSettings = "/Settings:`"${{ github.workspace }}/drop/FunctionalTests/MyProject.FunctionalTests/test.runsettings`" "
        #Note that the `" is an escape character to quote strings, and the `& is needed to start the command
        $command = "`& `"$vsTestConsoleExe`" `"$targetTestDll`" $testRunSettings $parameters "
        Write-Host "$command"
        Invoke-Expression $command
      shell: powershell
    - name: 'Swap Slots: website'
      uses: Azure/cli@v1.0.0
      with:
        inlineScript: az webapp deployment slot swap --resource-group ${{ env.ResourceGroupName }} --name ${{ env.WebsiteName }} --slot staging --target-slot production
                    

Add workflow dispatch trigger (run GitHub actions on demand)

Try some samples:

         
         

No YAML is captured or stored in the process of the conversion.
The source code for this website, and it's core conversion code, is stored in GitHub and is fully open source.

If you run into a bug, please post an issue!