Skip to content

Build

Build #722

Workflow file for this run

name: Build
on:
workflow_call:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
# Daily 5am australian/brisbane time (7pm UTC)
- cron: "0 19 * * *"
release:
types: [created]
workflow_dispatch:
inputs:
release-tag:
description: "The tag of the release being replicated in Octopus Deploy"
required: true
env:
PACKAGE_VERSION: 6.0.${{ github.run_number }}
OCTOPUS_URL: ${{ secrets.OCTOPUS_URL }}
OCTOPUS_API_KEY: ${{ secrets.INTEGRATIONS_API_KEY }}
jobs:
build:
name: Build code
runs-on: ubuntu-latest
outputs:
package_version: ${{ steps.build.outputs.package_version }}
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: "16"
cache: "npm"
- name: Build
id: build
run: |
npm ci
npm run build -- --extensionVersion $PACKAGE_VERSION
echo "::set-output name=package_version::$PACKAGE_VERSION"
- uses: actions/upload-artifact@v3
with:
name: dist
path: dist/
test:
name: Run test matrix
needs: build
runs-on: ${{ matrix.os }}
permissions:
id-token: write
contents: read
checks: write
strategy:
matrix:
os: [windows-2022, ubuntu-20.04, macos-11]
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: "16"
cache: "npm"
- name: Test
run: |
npm ci
npm run test
- uses: dorny/test-reporter@v1
if: success() || failure()
name: Tests report
with:
name: Tests report
path: "reports/jest-*.xml"
reporter: jest-junit
package:
name: Package and Push artifacts to Octopus
needs: [build, test]
runs-on: ubuntu-latest
if: github.event_name == 'release' || (github.actor != 'dependabot[bot]' && github.actor != 'dependabot-preview[bot]')
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v3
with:
name: dist
path: dist
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: "16"
cache: "npm"
- name: Install Go
uses: actions/setup-go@v3
with:
go-version: "^1.19.5"
- name: Embed octo portable
run: |
pwsh ./embed-octo.ps1
- name: Replace versions in tasks and create vsix
run: |
./pack.ps1 -environment Production -version ${{ needs.build.outputs.package_version }} -setupTaskDependencies
./pack.ps1 -environment Test -version ${{ needs.build.outputs.package_version }}
shell: pwsh
- name: Create Packages
id: create-packages
run: |
tar -czf OctoTFS.vsix.${{ needs.build.outputs.package_version }}.tar.gz ./Artifacts/**/*.vsix
tar -czf OctoTFS.publish.${{ needs.build.outputs.package_version }}.tar.gz ./publish.ps1 ./dist/extension-manifest*.json
- name: Push Package 🐙
uses: OctopusDeploy/push-package-action@v3
with:
space: "Integrations"
packages: |
OctoTFS.vsix.${{ needs.build.outputs.package_version }}.tar.gz
OctoTFS.publish.${{ needs.build.outputs.package_version }}.tar.gz
- name: Fetch Release Notes
id: fetch-release-notes
if: github.event_name == 'release'
run: |
echo "::debug::${{github.event_name}}"
OUTPUT_FILE="release_notes.txt"
jq --raw-output '.release.body' ${{ github.event_path }} | sed 's#\r# #g' > $OUTPUT_FILE
echo "::set-output name=release-note-file::$OUTPUT_FILE"
- name: Create a release in Octopus Deploy 🐙
uses: OctopusDeploy/create-release-action@v3
with:
space: "Integrations"
project: "Azure DevOps Extension"
package_version: ${{ needs.build.outputs.package_version }}
channel: ${{ (github.event_name == 'release' && 'Release') || '' }}
release_notes_file: ${{ (github.event_name == 'release' && steps.fetch-release-notes.outputs.release-note-file) || ''}}
git_ref: ${{ (github.ref_type == 'tag' && 'main' ) || (github.head_ref || github.ref) }}
git_commit: ${{ github.event.after || github.event.pull_request.head.sha }}