forked from actions/toolkit
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
E2E tests for the @actions/artifact package (actions#421)
* End-to-end artifact tests * E2E tests for artifact package
- Loading branch information
1 parent
bb1053a
commit 1688b11
Showing
6 changed files
with
128 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
name: artifact-unit-tests | ||
on: push | ||
|
||
jobs: | ||
build: | ||
name: Build | ||
|
||
strategy: | ||
matrix: | ||
runs-on: [ubuntu-latest, windows-latest, macOS-latest] | ||
fail-fast: false | ||
|
||
runs-on: ${{ matrix.runs-on }} | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v2 | ||
|
||
- name: Set Node.js 12.x | ||
uses: actions/setup-node@v1 | ||
with: | ||
node-version: 12.x | ||
|
||
# In order to upload & download artifacts from a shell script, certain env variables need to be set that are only available in the | ||
# node context. This runs a local action that gets and sets the necessary env variables that are needed | ||
- name: Set env variables | ||
uses: ./packages/artifact/__tests__/ci-test-action/ | ||
|
||
# Need root node_modules because certain npm packages like jest are configured for the entire repository and it won't be possible | ||
# without these to just compile the artifacts package | ||
- name: Install root npm packages | ||
run: npm ci | ||
|
||
- name: Compile artifact package | ||
run: | | ||
npm ci | ||
npm run tsc | ||
working-directory: packages/artifact | ||
|
||
- name: Set artifact file contents | ||
run: | | ||
echo "::set-env name=non-gzip-artifact-content::hello" | ||
echo "::set-env name=gzip-artifact-content::Some large amount of text that has a compression ratio that is greater than 100%. If greater than 100%, gzip is used to upload the file" | ||
- name: Create files that will be uploaded | ||
run: | | ||
mkdir artifact-path | ||
echo ${{ env.non-gzip-artifact-content }} > artifact-path/world.txt | ||
echo ${{ env.gzip-artifact-content }} > artifact-path/gzip.txt | ||
# We're using node -e to call the functions directly available in the @actions/artifact package | ||
- name: Upload artifacts using uploadArtifact() | ||
run: | | ||
node -e "Promise.resolve(require('./packages/artifact/lib/artifact-client').create().uploadArtifact('my-artifact-1',['artifact-path/world.txt'], '${{ github.workspace }}'))" | ||
node -e "Promise.resolve(require('./packages/artifact/lib/artifact-client').create().uploadArtifact('my-artifact-2',['artifact-path/gzip.txt'], '${{ github.workspace }}'))" | ||
- name: Download artifacts using downloadArtifact() | ||
run: | | ||
mkdir artifact-1-directory | ||
node -e "Promise.resolve(require('./packages/artifact/lib/artifact-client').create().downloadArtifact('my-artifact-1','artifact-1-directory'))" | ||
mkdir artifact-2-directory | ||
node -e "Promise.resolve(require('./packages/artifact/lib/artifact-client').create().downloadArtifact('my-artifact-2','artifact-2-directory'))" | ||
- name: Verify downloadArtifact() | ||
shell: bash | ||
run: | | ||
scripts/test-artifact-file.sh "artifact-1-directory/artifact-path/world.txt" "${{ env.non-gzip-artifact-content }}" | ||
scripts/test-artifact-file.sh "artifact-2-directory/artifact-path/gzip.txt" "${{ env.gzip-artifact-content }}" | ||
- name: Download artifacts using downloadAllArtifacts() | ||
run: | | ||
mkdir multi-artifact-directory | ||
node -e "Promise.resolve(require('./packages/artifact/lib/artifact-client').create().downloadAllArtifacts('multi-artifact-directory'))" | ||
- name: Verify downloadAllArtifacts() | ||
shell: bash | ||
run: | | ||
scripts/test-artifact-file.sh "multi-artifact-directory/my-artifact-1/artifact-path/world.txt" "${{ env.non-gzip-artifact-content }}" | ||
scripts/test-artifact-file.sh "multi-artifact-directory/my-artifact-2/artifact-path/gzip.txt" "${{ env.gzip-artifact-content }}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
name: 'Set env variables' | ||
description: 'Sets certain env variables so that e2e artifact upload and download can be tested in a shell' | ||
runs: | ||
using: 'node12' | ||
main: 'index.js' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
// Certain env variables are not set by default in a shell context and are only available in a node context from a running action | ||
// In order to be able to upload and download artifacts e2e in a shell when running CI tests, we need these env variables set | ||
console.log(`::set-env name=ACTIONS_RUNTIME_URL::${process.env.ACTIONS_RUNTIME_URL}`) | ||
console.log(`::set-env name=ACTIONS_RUNTIME_TOKEN::${process.env.ACTIONS_RUNTIME_TOKEN}`) | ||
console.log(`::set-env name=GITHUB_RUN_ID::${process.env.GITHUB_RUN_ID}`) |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
#!/bin/bash | ||
|
||
path="$1" | ||
expectedContent="$2" | ||
|
||
if [ "$path" == "" ]; then | ||
echo "File path not provided" | ||
exit 1 | ||
fi | ||
|
||
if [ "$expectedContent" == "" ]; then | ||
echo "Expected file contents not provided" | ||
exit 1 | ||
fi | ||
|
||
if [ ! -f "$path" ]; then | ||
echo "Expected file $path does not exist" | ||
exit 1 | ||
fi | ||
|
||
actualContent=$(cat $path) | ||
if [ "$actualContent" != "$expectedContent" ];then | ||
echo "File contents are not correct, expected $expectedContent, recieved $actualContent" | ||
exit 1 | ||
fi |