Skip to content

Commit

Permalink
Merge pull request #82 from timrogers/timrogers/e2e
Browse files Browse the repository at this point in the history
chore: add end-to-end tests for exports and imports on GitHub.com
  • Loading branch information
timrogers authored Nov 22, 2023
2 parents d89512b + e4d04e1 commit 36aaec3
Show file tree
Hide file tree
Showing 3 changed files with 257 additions and 18 deletions.
18 changes: 0 additions & 18 deletions .github/workflows/build-test-and-lint.yml

This file was deleted.

92 changes: 92 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: CI
on:
pull_request:
branches: [main]
push:
branches: [main]
tags: ['v**']
jobs:
test_and_lint:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/[email protected]
with:
node-version: 18.x
cache: 'npm'
- run: npm ci
- run: npm run lint
package:
name: Package binaries
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/[email protected]
with:
node-version: 18.x
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Generate binaries for macOS, Linux and Windows
run: npm run package
- name: Rename macOS binary to conform to GitHub CLI extension rules
run: mv bin/migrate-project-macos bin/gh-migrate-project-darwin-amd64
- name: Rename Windows binary to conform to GitHub CLI extension rules
run: mv bin/migrate-project-win.exe bin/gh-migrate-project-windows-amd64.exe
- name: Rename Linux binary to conform to GitHub CLI extension rules
run: mv bin/migrate-project-linux bin/gh-migrate-project-linux-amd64
- name: Upload macOS binary as artifact
uses: actions/upload-artifact@v3
with:
name: package-macos
path: bin/gh-migrate-project-darwin-amd64
- name: Upload Linux binary as artifact
uses: actions/upload-artifact@v3
with:
name: package-linux
path: bin/gh-migrate-project-linux-amd64
- name: Upload Windows binary as artifact
uses: actions/upload-artifact@v3
with:
name: package-windows
path: bin/gh-migrate-project-windows-amd64.exe
create_release:
name: Create release
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
needs: ['package', 'test_and_lint']

permissions:
contents: write

steps:
- name: Download Windows binary
uses: actions/download-artifact@v3
with:
name: package-windows
path: bin
- name: Download macOS binary
uses: actions/download-artifact@v3
with:
name: package-macos
path: bin
- name: Download Linux binary
uses: actions/download-artifact@v3
with:
name: package-linux
path: bin
- name: Create GitHub release
uses: softprops/action-gh-release@v1
with:
files: |
bin/gh-migrate-project-darwin-amd64
bin/gh-migrate-project-linux-amd64
bin/gh-migrate-project-windows-amd64.exe
generate_release_notes: true

165 changes: 165 additions & 0 deletions .github/workflows/end_to_end_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
name: End to end tests
on:
workflow_run:
workflows:
- "CI"
types:
- completed

permissions:
actions: read
contents: read
checks: write

jobs:
end_to_end_tests_macos:
name: Run end to end tests (macOS/GitHub.com)
runs-on: macos-latest
env:
check_name: End to end tests (macOS/GitHub.com)

steps:
- name: Download macOS binary
uses: dawidd6/action-download-artifact@268677152d06ba59fcec7a7f0b5d961b6ccd7e1e
with:
run_id: ${{ github.event.workflow_run.id }}
name: package-macos
path: bin
- name: Create `output` directory
run: mkdir output
- name: Make macOS binary executable
run: chmod +x bin/gh-migrate-project-darwin-amd64
- name: Export a project from GitHub.com
run: ./bin/gh-migrate-project-darwin-amd64 export --project-owner gh-migrate-project-sandbox --project-number 1
env:
EXPORT_GITHUB_TOKEN: ${{ secrets.GH_MIGRATE_PROJECT_SANDBOX_TOKEN }}
- name: Copy outputs to output/ directory
run: cp project.json output/ && cp repository-mappings.csv output/
- name: Print outputted project data
run: cat project.json
- name: Print repository mappings template
run: cat repository-mappings.csv
- name: Fill in repository mappings template
run: |
echo "source_repository,target_repository
gh-migrate-project-sandbox/initial-repository,gh-migrate-project-sandbox/initial-repository" > completed-repository-mappings.csv
- name: Import project to GitHub.com
run: ./bin/gh-migrate-project-darwin-amd64 import --input-path project.json --repository-mappings-path completed-repository-mappings.csv --project-owner gh-migrate-project-sandbox
env:
IMPORT_GITHUB_TOKEN: ${{ secrets.GH_MIGRATE_PROJECT_SANDBOX_TOKEN }}
- name: Upload outputs as artifacts
uses: actions/upload-artifact@v3
with:
name: macos-outputs
path: output
- name: Set Status Check
uses: LouisBrunner/checks-action@c6dbaea4f9c79ccfe67c038acddaf713518b255d
if: always()
with:
sha: ${{ github.event.workflow_run.head_sha}}
token: ${{ secrets.GITHUB_TOKEN }}
name: ${{ env.check_name }}
conclusion: ${{ job.status }}

end_to_end_tests_linux:
name: Run end to end tests (Linux/GitHub.com)
runs-on: ubuntu-latest
env:
check_name: End to end tests (Linux/GitHub.com)

steps:
- name: Download Linux binary
uses: dawidd6/action-download-artifact@268677152d06ba59fcec7a7f0b5d961b6ccd7e1e
with:
run_id: ${{ github.event.workflow_run.id }}
name: package-linux
path: bin
- name: Create `output` directory
run: mkdir output
- name: Make Linux binary executable
run: chmod +x bin/gh-migrate-project-linux-amd64
- name: Export a project from GitHub.com
run: ./bin/gh-migrate-project-linux-amd64 export --project-owner gh-migrate-project-sandbox --project-number 1
env:
EXPORT_GITHUB_TOKEN: ${{ secrets.GH_MIGRATE_PROJECT_SANDBOX_TOKEN }}
- name: Copy outputs to output/ directory
run: cp project.json output/ && cp repository-mappings.csv output/
- name: Print outputted project data
run: cat project.json
- name: Print repository mappings template
run: cat repository-mappings.csv
- name: Fill in repository mappings template
run: |
echo "source_repository,target_repository
gh-migrate-project-sandbox/initial-repository,gh-migrate-project-sandbox/initial-repository" > completed-repository-mappings.csv
- name: Import project to GitHub.com
run: ./bin/gh-migrate-project-linux-amd64 import --input-path project.json --repository-mappings-path completed-repository-mappings.csv --project-owner gh-migrate-project-sandbox
env:
IMPORT_GITHUB_TOKEN: ${{ secrets.GH_MIGRATE_PROJECT_SANDBOX_TOKEN }}
- name: Upload outputs as artifacts
uses: actions/upload-artifact@v3
with:
name: linux-outputs
path: output
- name: Upload
if: always()
uses: actions/upload-artifact@v3
with:
name: dbg
retention-days: 1
path: ${{ github.event_path }}
- name: Set Status Check
uses: LouisBrunner/checks-action@c6dbaea4f9c79ccfe67c038acddaf713518b255d
if: always()
with:
sha: ${{ github.event.workflow_run.head_sha}}
token: ${{ secrets.GITHUB_TOKEN }}
name: ${{ env.check_name }}
conclusion: ${{ job.status }}

end_to_end_tests_windows:
name: Run end to end tests (Windows/GitHub.com)
runs-on: windows-latest
env:
check_name: End to end tests (Windows/GitHub.com)

steps:
- name: Download Windows binary
uses: dawidd6/action-download-artifact@268677152d06ba59fcec7a7f0b5d961b6ccd7e1e
with:
run_id: ${{ github.event.workflow_run.id }}
name: package-windows
path: bin
- name: Create `output` directory
run: mkdir output
- name: Export a project from GitHub.com
run: bin/gh-migrate-project-windows-amd64.exe export --project-owner gh-migrate-project-sandbox --project-number 1
env:
EXPORT_GITHUB_TOKEN: ${{ secrets.GH_MIGRATE_PROJECT_SANDBOX_TOKEN }}
- name: Copy outputs to output/ directory
run: cp project.json output/ && cp repository-mappings.csv output/
- name: Print outputted project data
run: cat project.json
- name: Print repository mappings template
run: cat repository-mappings.csv
- name: Fill in repository mappings template
run: |
echo "source_repository,target_repository
gh-migrate-project-sandbox/initial-repository,gh-migrate-project-sandbox/initial-repository" > completed-repository-mappings.csv
- name: Import project to GitHub.com
run: bin/gh-migrate-project-windows-amd64.exe import --input-path project.json --repository-mappings-path completed-repository-mappings.csv --project-owner gh-migrate-project-sandbox
env:
IMPORT_GITHUB_TOKEN: ${{ secrets.GH_MIGRATE_PROJECT_SANDBOX_TOKEN }}
- name: Upload outputs as artifacts
uses: actions/upload-artifact@v3
with:
name: windows-outputs
path: output
- name: Set Status Check
uses: LouisBrunner/checks-action@c6dbaea4f9c79ccfe67c038acddaf713518b255d
if: always()
with:
sha: ${{ github.event.workflow_run.head_sha}}
token: ${{ secrets.GITHUB_TOKEN }}
name: ${{ env.check_name }}
conclusion: ${{ job.status }}

0 comments on commit 36aaec3

Please sign in to comment.