diff --git a/.github/workflows/build-test-and-lint.yml b/.github/workflows/build-test-and-lint.yml deleted file mode 100644 index 73fa1bf..0000000 --- a/.github/workflows/build-test-and-lint.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Build, test and lint -on: - push: - branches: [main] - pull_request: - branches: [main] -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4.0.0 - with: - node-version: 18.x - cache: 'npm' - - run: npm ci - - run: npm run lint diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..e20a29f --- /dev/null +++ b/.github/workflows/ci.yml @@ -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/setup-node@v4.0.0 + 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/setup-node@v4.0.0 + 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 + diff --git a/.github/workflows/end_to_end_tests.yml b/.github/workflows/end_to_end_tests.yml new file mode 100644 index 0000000..a871e2b --- /dev/null +++ b/.github/workflows/end_to_end_tests.yml @@ -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 }} \ No newline at end of file