diff --git a/.github/workflows/split.yml b/.github/workflows/split.yml new file mode 100644 index 000000000..6f84b45c0 --- /dev/null +++ b/.github/workflows/split.yml @@ -0,0 +1,85 @@ +name: Split Bundle + +on: + workflow_dispatch: + inputs: + cli-release: + description: 'CodeQL CLI Release (e.g., "v2.2.5")' + required: true + bundle-tag: + description: 'Tag of the bundle release (e.g., "codeql-bundle-20200826")' + required: true + +jobs: + build: + runs-on: ubuntu-latest + env: + CLI_RELEASE: "${{ github.event.inputs.cli-release }}" + RELEASE_TAG: "${{ github.event.inputs.bundle-tag }}" + + strategy: + matrix: + platform: ["linux64", "osx64", "win64"] + language: ["cpp", "csharp", "go", "java", "javascript", "python"] + + steps: + - name: Resolve Upload URL for the release + id: save_url + run: | + UPLOAD_URL=$(curl -sS \ + "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${RELEASE_TAG}" \ + -H "Accept: application/json" \ + -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" | jq .upload_url | sed s/\"//g) + echo ${UPLOAD_URL} + echo "::set-output name=upload_url::${UPLOAD_URL}" + + - name: Download CodeQL CLI and Bundle + run: | + wget --no-verbose "https://github.com/${GITHUB_REPOSITORY}/releases/download/${RELEASE_TAG}/codeql-bundle.tar.gz" + wget --no-verbose "https://github.com/github/codeql-cli-binaries/releases/download/${CLI_RELEASE}/codeql-${{matrix.platform}}.zip" + + - name: Create Platform Package + # Replace the codeql-binaries with the platform specific ones + run: | + gunzip codeql-bundle.tar.gz + tar -f codeql-bundle.tar --delete codeql + unzip -q codeql-${{matrix.platform}}.zip + tar -f codeql-bundle.tar --append codeql + gzip codeql-bundle.tar + mv codeql-bundle.tar.gz codeql-bundle-${{matrix.platform}}.tar.gz + du -sh codeql-bundle-${{matrix.platform}}.tar.gz + + - name: Upload Platform Package + uses: actions/upload-release-asset@v1 + if: matrix.language == 'cpp' # Only once per platform, cpp is arbitrary + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.save_url.outputs.upload_url }} + asset_path: ./codeql-bundle-${{matrix.platform}}.tar.gz + asset_name: codeql-bundle-${{matrix.platform}}.tar.gz + asset_content_type: application/tar+gzip + + - name: Create Platform-Language Package + # Replace the codeql-binaries with the platform specific ones + run: | + gunzip codeql-bundle-${{matrix.platform}}.tar.gz + [ "${{matrix.language}}" != "cpp" ] && tar -f codeql-bundle-${{matrix.platform}}.tar --delete codeql/cpp --delete ql/cpp + [ "${{matrix.language}}" != "csharp" ] && tar -f codeql-bundle-${{matrix.platform}}.tar --delete codeql/csharp --delete ql/csharp + [ "${{matrix.language}}" != "go" ] && tar -f codeql-bundle-${{matrix.platform}}.tar --delete codeql/go --delete codeql-go + [ "${{matrix.language}}" != "java" ] && tar -f codeql-bundle-${{matrix.platform}}.tar --delete codeql/java --delete ql/java + [ "${{matrix.language}}" != "javascript" ] && tar -f codeql-bundle-${{matrix.platform}}.tar --delete codeql/javascript --delete ql/javascript + [ "${{matrix.language}}" != "python" ] && tar -f codeql-bundle-${{matrix.platform}}.tar --delete codeql/python --delete ql/python + gzip codeql-bundle-${{matrix.platform}}.tar + mv codeql-bundle-${{matrix.platform}}.tar.gz codeql-bundle-${{matrix.platform}}-${{matrix.language}}.tar.gz + du -sh codeql-bundle-${{matrix.platform}}-${{matrix.language}}.tar.gz + + - name: Upload Language Package + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.save_url.outputs.upload_url }} + asset_path: ./codeql-bundle-${{matrix.platform}}-${{matrix.language}}.tar.gz + asset_name: codeql-bundle-${{matrix.platform}}-${{matrix.language}}.tar.gz + asset_content_type: application/tar+gzip \ No newline at end of file