Merge 57c76f1935
into cc2ef5ff7d
commit
bb6f0ca48b
@ -0,0 +1,39 @@
|
|||||||
|
name: 'Send Slack notification'
|
||||||
|
description: 'SendSlack notification about new versions of a tool'
|
||||||
|
inputs:
|
||||||
|
url:
|
||||||
|
required: true
|
||||||
|
description: 'Slack channel url'
|
||||||
|
tool-name:
|
||||||
|
required: true
|
||||||
|
description: 'Name of a tool to send notification for. Like Xamarin or Python'
|
||||||
|
default: 'Xamarin'
|
||||||
|
tool-version:
|
||||||
|
required: false
|
||||||
|
description: 'New versions of a tool'
|
||||||
|
pipeline-url:
|
||||||
|
required: false
|
||||||
|
description: 'Url of a pipeline'
|
||||||
|
image-url:
|
||||||
|
required: false
|
||||||
|
description: 'Image url for message'
|
||||||
|
default: 'https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png'
|
||||||
|
text:
|
||||||
|
required: false
|
||||||
|
description: 'Message text'
|
||||||
|
add-to-toolset-flag:
|
||||||
|
required: false
|
||||||
|
description: 'Flag to use notification for adding new versions to toolset'
|
||||||
|
runs:
|
||||||
|
using: "composite"
|
||||||
|
steps:
|
||||||
|
- id: send-slack-notification
|
||||||
|
name: Send Slack notification
|
||||||
|
shell: pwsh
|
||||||
|
run: ./get-new-tool-versions/send-slack-notification.ps1 -Url "${{ inputs.url }}" `
|
||||||
|
-ToolName "${{ inputs.tool-name }}" `
|
||||||
|
-ToolVersion "${{ inputs.tool-version }}" `
|
||||||
|
-PipelineUrl "${{ inputs.pipeline-url }}" `
|
||||||
|
-ImageUrl "${{ inputs.image-url }}" `
|
||||||
|
-Text "${{ inputs.text }}" `
|
||||||
|
${{ inputs.add-to-toolset-flag }}
|
@ -0,0 +1,74 @@
|
|||||||
|
# This workflow will build and push a node.js application to an Azure Web App when a commit is pushed to your default branch.
|
||||||
|
#
|
||||||
|
# This workflow assumes you have already created the target Azure App Service web app.
|
||||||
|
# For instructions see https://docs.microsoft.com/en-us/azure/app-service/quickstart-nodejs?tabs=linux&pivots=development-environment-cli
|
||||||
|
#
|
||||||
|
# To configure this workflow:
|
||||||
|
#
|
||||||
|
# 1. Download the Publish Profile for your Azure Web App. You can download this file from the Overview page of your Web App in the Azure Portal.
|
||||||
|
# For more information: https://docs.microsoft.com/en-us/azure/app-service/deploy-github-actions?tabs=applevel#generate-deployment-credentials
|
||||||
|
#
|
||||||
|
# 2. Create a secret in your repository named AZURE_WEBAPP_PUBLISH_PROFILE, paste the publish profile contents as the value of the secret.
|
||||||
|
# For instructions on obtaining the publish profile see: https://docs.microsoft.com/azure/app-service/deploy-github-actions#configure-the-github-secret
|
||||||
|
#
|
||||||
|
# 3. Change the value for the AZURE_WEBAPP_NAME. Optionally, change the AZURE_WEBAPP_PACKAGE_PATH and NODE_VERSION environment variables below.
|
||||||
|
#
|
||||||
|
# For more information on GitHub Actions for Azure: https://github.com/Azure/Actions
|
||||||
|
# For more information on the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy
|
||||||
|
# For more samples to get started with GitHub Action workflows to deploy to Azure: https://github.com/Azure/actions-workflow-samples
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
env:
|
||||||
|
AZURE_WEBAPP_NAME: your-app-name # set this to your application's name
|
||||||
|
AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root
|
||||||
|
NODE_VERSION: '14.x' # set this to the node version to use
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Set up Node.js
|
||||||
|
uses: actions/setup-node@v2
|
||||||
|
with:
|
||||||
|
node-version: ${{ env.NODE_VERSION }}
|
||||||
|
cache: 'npm'
|
||||||
|
|
||||||
|
- name: npm install, build, and test
|
||||||
|
run: |
|
||||||
|
npm install
|
||||||
|
npm run build --if-present
|
||||||
|
npm run test --if-present
|
||||||
|
|
||||||
|
- name: Upload artifact for deployment job
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: node-app
|
||||||
|
path: .
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
environment:
|
||||||
|
name: 'Development'
|
||||||
|
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Download artifact from build job
|
||||||
|
uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: node-app
|
||||||
|
|
||||||
|
- name: 'Deploy to Azure WebApp'
|
||||||
|
id: deploy-to-webapp
|
||||||
|
uses: azure/webapps-deploy@v2
|
||||||
|
with:
|
||||||
|
app-name: ${{ env.AZURE_WEBAPP_NAME }}
|
||||||
|
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
|
||||||
|
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
|
@ -0,0 +1,36 @@
|
|||||||
|
# This is a basic workflow to help you get started with Actions
|
||||||
|
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
# Controls when the workflow will run
|
||||||
|
on:
|
||||||
|
# Triggers the workflow on push or pull request events but only for the main branch
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
# Allows you to run this workflow manually from the Actions tab
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||||
|
jobs:
|
||||||
|
# This workflow contains a single job called "build"
|
||||||
|
build:
|
||||||
|
# The type of runner that the job will run on
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||||
|
steps:
|
||||||
|
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# Runs a single command using the runners shell
|
||||||
|
- name: Run a one-line script
|
||||||
|
run: echo Hello, world!
|
||||||
|
|
||||||
|
# Runs a set of commands using the runners shell
|
||||||
|
- name: Run a multi-line script
|
||||||
|
run: |
|
||||||
|
echo Add other actions to build,
|
||||||
|
echo test, and deploy your project.
|
@ -0,0 +1,89 @@
|
|||||||
|
name: Get tools new versions
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 8 * * THU'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: pwsh
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
find-new-tool-versions:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
tool:
|
||||||
|
- name: 'Xamarin'
|
||||||
|
image: 'https://avatars.githubusercontent.com/u/790012?s=200&v=4'
|
||||||
|
releases-url: 'null'
|
||||||
|
filter-parameter: 'null'
|
||||||
|
filter-arch: 'null'
|
||||||
|
- name: 'Python'
|
||||||
|
image: 'https://avatars.githubusercontent.com/u/1525981?s=200&v=4'
|
||||||
|
releases-url: 'https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json'
|
||||||
|
filter-parameter: 'version'
|
||||||
|
filter-arch: 'x64'
|
||||||
|
- name: 'PyPy'
|
||||||
|
image: 'https://avatars.githubusercontent.com/u/318667?s=200&v=4'
|
||||||
|
releases-url: 'https://downloads.python.org/pypy/versions.json'
|
||||||
|
filter-parameter: 'python_version'
|
||||||
|
filter-arch: 'x86'
|
||||||
|
- name: 'Node'
|
||||||
|
image: 'https://avatars.githubusercontent.com/u/9950313?s=200&v=4'
|
||||||
|
releases-url: 'https://raw.githubusercontent.com/actions/node-versions/main/versions-manifest.json'
|
||||||
|
filter-parameter: 'version'
|
||||||
|
filter-arch: 'x64'
|
||||||
|
- name: 'Go'
|
||||||
|
image: 'https://avatars.githubusercontent.com/u/4314092?s=200&v=4'
|
||||||
|
releases-url: 'https://raw.githubusercontent.com/actions/go-versions/main/versions-manifest.json'
|
||||||
|
filter-parameter: 'version'
|
||||||
|
filter-arch: 'x64'
|
||||||
|
name: 'Searching for new versions of ${{ matrix.tool.name }}'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- id: get-new-tool-versions
|
||||||
|
name: Get new tool versions
|
||||||
|
run: |
|
||||||
|
$versionsOutput = ./get-new-tool-versions/verify-new-tool-version-added-to-image.ps1 `
|
||||||
|
-ToolName ${{ matrix.tool.name }} `
|
||||||
|
-ReleasesUrl ${{ matrix.tool.releases-url }} `
|
||||||
|
-FilterParameter ${{ matrix.tool.filter-parameter }} `
|
||||||
|
-FilterArch ${{ matrix.tool.filter-arch }}
|
||||||
|
echo "::set-output name=versions-output::$versionsOutput"
|
||||||
|
- name: Check versions
|
||||||
|
if: steps.get-new-tool-versions.outputs.versions-output == ''
|
||||||
|
run: Write-Host "No new versions found"
|
||||||
|
- uses: ./.github/actions/send-slack-notification
|
||||||
|
name: Send Slack notification
|
||||||
|
if: steps.get-new-tool-versions.outputs.versions-output != ''
|
||||||
|
with:
|
||||||
|
url: ${{ secrets.SLACK_CHANNEL_URL }}
|
||||||
|
tool-name: '${{ matrix.tool.name }}'
|
||||||
|
tool-version: ${{ steps.get-new-tool-versions.outputs.versions-output }}
|
||||||
|
image-url: '${{ matrix.tool.image }}'
|
||||||
|
add-to-toolset-flag: '-AddToToolsetFlag'
|
||||||
|
|
||||||
|
check_build:
|
||||||
|
name: Check build for failures
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [find-new-tool-versions]
|
||||||
|
if: failure()
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- id: get-failed-jobs
|
||||||
|
name: Get failed jobs
|
||||||
|
run: |
|
||||||
|
$jobs_url = "$env:GITHUB_API_URL/repos/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID/jobs"
|
||||||
|
$failedJobs = (Invoke-RestMethod -Uri $jobs_url).jobs |
|
||||||
|
Where-Object conclusion -eq "failure" |
|
||||||
|
ForEach-Object {"\n\t" + $_.name.split(" ")[-1] + ": $($_.html_url)"}
|
||||||
|
echo "::set-output name=failed-jobs::$failedJobs"
|
||||||
|
- uses: ./.github/actions/send-slack-notification
|
||||||
|
name: Send Slack notification about failure
|
||||||
|
with:
|
||||||
|
url: ${{ secrets.SLACK_CHANNEL_URL }}
|
||||||
|
tool-name: 'Tool name'
|
||||||
|
pipeline-url: '$env:GITHUB_SERVER_URL/$env:GITHUB_REPOSITORY/actions/runs/$env:GITHUB_RUN_ID'
|
||||||
|
text: "Missing toolset tool versions checker pipeline has failed jobs:/n/t${{ steps.get-failed-jobs.outputs.failed-jobs }}"
|
@ -0,0 +1,25 @@
|
|||||||
|
function Search-ToolsVersionsNotOnImage {
|
||||||
|
param (
|
||||||
|
[string]$ToolName,
|
||||||
|
[string]$ReleasesUrl,
|
||||||
|
[string]$FilterParameter,
|
||||||
|
[string]$FilterArch
|
||||||
|
)
|
||||||
|
|
||||||
|
$stableReleases = (Invoke-RestMethod $ReleasesUrl) | Where-Object stable -eq $true
|
||||||
|
$stableReleaseVersions = $stableReleases | ForEach-Object {
|
||||||
|
if ($ToolName -eq "Node") {
|
||||||
|
$_.$FilterParameter.split(".")[0] + ".0"
|
||||||
|
} else {
|
||||||
|
$_.$FilterParameter.split(".")[0,1] -join"."
|
||||||
|
}
|
||||||
|
} | Select-Object -Unique
|
||||||
|
$toolsetUrl = "https://raw.githubusercontent.com/actions/virtual-environments/main/images/win/toolsets/toolset-2022.json"
|
||||||
|
$latestMinorVersion = (Invoke-RestMethod $toolsetUrl).toolcache |
|
||||||
|
Where-Object {$_.name -eq $ToolName -and $_.arch -eq $FilterArch} |
|
||||||
|
ForEach-Object {$_.versions.Replace("*","0")} |
|
||||||
|
Select-Object -Last 1
|
||||||
|
$versionsToAdd = $stableReleaseVersions | Where-Object {[version]$_ -gt [version]$latestMinorVersion}
|
||||||
|
|
||||||
|
return $versionsToAdd
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
function Search-XamarinVersionsNotOnImage {
|
||||||
|
param (
|
||||||
|
[string]$ReleasesUrl,
|
||||||
|
[array]$FilterProducts
|
||||||
|
)
|
||||||
|
|
||||||
|
$xamarinReleases = (Invoke-RestMethod $ReleasesUrl).items
|
||||||
|
$filteredReleases = $xamarinReleases | Where-Object {$_.name -in $FilterProducts.name} | Sort-Object name | Select-Object name, version
|
||||||
|
$toolsetUrl = "https://raw.githubusercontent.com/actions/virtual-environments/main/images/macos/toolsets/toolset-11.json"
|
||||||
|
$uploadedReleases = (Invoke-RestMethod $toolsetUrl).xamarin
|
||||||
|
$releasesOnImage = @()
|
||||||
|
foreach ($FilterProduct in $FilterProducts) {
|
||||||
|
$releasesOnImage += @{$FilterProduct.name = $uploadedReleases.($FilterProduct.property)}
|
||||||
|
}
|
||||||
|
$versionsToAdd = $filteredReleases | Where-Object {$releasesOnImage.($_.name) -notcontains $_.version} | ForEach-Object {[string]::Empty} {
|
||||||
|
'{0,-15} : {1}' -f $_.name, $_.version
|
||||||
|
}
|
||||||
|
return $versionsToAdd
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Check and return list of new available tool versions that not added to toolsets yet
|
||||||
|
|
||||||
|
.PARAMETER ToolName
|
||||||
|
Required parameter. The name of tool for which parser is available (Python, Xamarin, PyPy, Node, Go)
|
||||||
|
#>
|
||||||
|
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory)]
|
||||||
|
[ValidateSet("Python", "Xamarin", "PyPy", "Node", "Go")]
|
||||||
|
[string] $ToolName,
|
||||||
|
[string] $ReleasesUrl,
|
||||||
|
[string] $FilterParameter,
|
||||||
|
[string] $FilterArch
|
||||||
|
)
|
||||||
|
|
||||||
|
Get-ChildItem "$PSScriptRoot/parsers/verify-added-to-image/" | ForEach-Object {Import-Module $_.FullName}
|
||||||
|
|
||||||
|
if ($ToolName -in "Python", "PyPy", "Node", "Go") {
|
||||||
|
$versionsToAdd = Search-ToolsVersionsNotOnImage -ToolName $ToolName -ReleasesUrl $ReleasesUrl -FilterParameter $FilterParameter -FilterArch $FilterArch
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($ToolName -eq "Xamarin") {
|
||||||
|
$xamarinReleases = "http://aka.ms/manifest/stable"
|
||||||
|
$xamarinProducts = @(
|
||||||
|
[PSCustomObject] @{name = 'Mono Framework'; property = 'mono-versions'}
|
||||||
|
[PSCustomObject] @{name = 'Xamarin.Android'; property = 'android-versions'}
|
||||||
|
[PSCustomObject] @{name = 'Xamarin.iOS'; property = 'ios-versions'}
|
||||||
|
[PSCustomObject] @{name = 'Xamarin.Mac'; property = 'mac-versions'}
|
||||||
|
)
|
||||||
|
$versionsToAdd = Search-XamarinVersionsNotOnImage -ReleasesUrl $xamarinReleases -FilterProducts $xamarinProducts
|
||||||
|
$joinChars = "\n\t"
|
||||||
|
}
|
||||||
|
|
||||||
|
$versionsToAdd = $versionsToAdd -join $joinChars
|
||||||
|
|
||||||
|
return $versionsToAdd
|
Loading…
Reference in New Issue