Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
210 changes: 210 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
name: E2E Test

on:
workflow_dispatch:
inputs:
test_filter:
description: 'Test filter (e.g., --tests SmokeTest)'
required: false
default: ''
push:
branches:
- master

# Note: E2E tests do NOT run on pull_request events from forks
# because GitHub Secrets are not available for security reasons.
# PRs from forks will only run the regular CI (build + unit tests).

jobs:
e2e-test:
name: E2E Test
runs-on: ubuntu-latest
# Skip if secrets are not available (e.g., fork PRs)
if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'push' }}
env:
KINTONE_BASE_URL: ${{ secrets.KINTONE_BASE_URL }}
KINTONE_DEFAULT_USER: ${{ secrets.KINTONE_DEFAULT_USER }}
KINTONE_DEFAULT_PASSWORD: ${{ secrets.KINTONE_DEFAULT_PASSWORD }}
KINTONE_TEST_USER: ${{ secrets.KINTONE_TEST_USER }}
KINTONE_TEST_PASSWORD: ${{ secrets.KINTONE_TEST_PASSWORD }}
KINTONE_SPACE_ID: ${{ secrets.KINTONE_SPACE_ID }}
KINTONE_MULTI_THREAD_SPACE_ID: ${{ secrets.KINTONE_MULTI_THREAD_SPACE_ID }}
KINTONE_MULTI_THREAD_DEFAULT_THREAD_ID: ${{ secrets.KINTONE_MULTI_THREAD_DEFAULT_THREAD_ID }}
KINTONE_GUEST_SPACE_ID: ${{ secrets.KINTONE_GUEST_SPACE_ID }}
KINTONE_TEMPLATE_ID: ${{ secrets.KINTONE_TEMPLATE_ID }}
KINTONE_TEST_APP_ID: ${{ secrets.KINTONE_TEST_APP_ID }}
KINTONE_TEST_SPACE_APP_ID: ${{ secrets.KINTONE_TEST_SPACE_APP_ID }}
KINTONE_TEST_APP_ID_FOR_GET_PLUGINS_PREVIEW: ${{ secrets.KINTONE_TEST_APP_ID_FOR_GET_PLUGINS_PREVIEW }}
KINTONE_TEST_APP_ID_FOR_GET_FORM_LAYOUT_PREVIEW: ${{ secrets.KINTONE_TEST_APP_ID_FOR_GET_FORM_LAYOUT_PREVIEW }}
KINTONE_TEST_APP_ID_FOR_PROCESS_MANAGEMENT: ${{ secrets.KINTONE_TEST_APP_ID_FOR_PROCESS_MANAGEMENT }}
KINTONE_TEST_APP_ID_FOR_UPDATE_APP_SETTINGS: ${{ secrets.KINTONE_TEST_APP_ID_FOR_UPDATE_APP_SETTINGS }}
KINTONE_TEST_APP_ID_FOR_PLUGIN: ${{ secrets.KINTONE_TEST_APP_ID_FOR_PLUGIN }}
KINTONE_BASIC_USER: ${{ secrets.KINTONE_BASIC_USER }}
KINTONE_BASIC_PASS: ${{ secrets.KINTONE_BASIC_PASS }}
permissions:
checks: write
contents: read
steps:
- uses: actions/checkout@v4

- name: Set up JDK 8
uses: actions/setup-java@v4
with:
distribution: corretto
java-version: 8
cache: gradle

- name: Grant execute permission for gradlew
run: |
chmod +x gradlew
chmod +x e2e-tests/gradlew
chmod +x e2e-tests/bin/*.sh

- name: Run E2E tests
env:
TEST_FILTER: ${{ github.event.inputs.test_filter }}
run: |
cd e2e-tests
./bin/run-test.sh ${TEST_FILTER}

- name: Publish Test Report
uses: mikepenz/action-junit-report@v5
if: success() || failure()
with:
check_name: E2E Test Report
report_paths: e2e-tests/build/test-results/test/TEST-*.xml
annotations_limit: 50

e2e-proxy-test:
name: Proxy E2E Test
runs-on: ubuntu-latest
needs: e2e-test
env:
KINTONE_BASE_URL: ${{ secrets.KINTONE_BASE_URL }}
KINTONE_DEFAULT_USER: ${{ secrets.KINTONE_DEFAULT_USER }}
KINTONE_DEFAULT_PASSWORD: ${{ secrets.KINTONE_DEFAULT_PASSWORD }}
KINTONE_TEST_USER: ${{ secrets.KINTONE_TEST_USER }}
KINTONE_TEST_PASSWORD: ${{ secrets.KINTONE_TEST_PASSWORD }}
KINTONE_SPACE_ID: ${{ secrets.KINTONE_SPACE_ID }}
KINTONE_MULTI_THREAD_SPACE_ID: ${{ secrets.KINTONE_MULTI_THREAD_SPACE_ID }}
KINTONE_MULTI_THREAD_DEFAULT_THREAD_ID: ${{ secrets.KINTONE_MULTI_THREAD_DEFAULT_THREAD_ID }}
KINTONE_GUEST_SPACE_ID: ${{ secrets.KINTONE_GUEST_SPACE_ID }}
KINTONE_TEMPLATE_ID: ${{ secrets.KINTONE_TEMPLATE_ID }}
KINTONE_TEST_APP_ID: ${{ secrets.KINTONE_TEST_APP_ID }}
KINTONE_TEST_SPACE_APP_ID: ${{ secrets.KINTONE_TEST_SPACE_APP_ID }}
KINTONE_TEST_APP_ID_FOR_GET_PLUGINS_PREVIEW: ${{ secrets.KINTONE_TEST_APP_ID_FOR_GET_PLUGINS_PREVIEW }}
KINTONE_TEST_APP_ID_FOR_GET_FORM_LAYOUT_PREVIEW: ${{ secrets.KINTONE_TEST_APP_ID_FOR_GET_FORM_LAYOUT_PREVIEW }}
KINTONE_TEST_APP_ID_FOR_PROCESS_MANAGEMENT: ${{ secrets.KINTONE_TEST_APP_ID_FOR_PROCESS_MANAGEMENT }}
KINTONE_TEST_APP_ID_FOR_UPDATE_APP_SETTINGS: ${{ secrets.KINTONE_TEST_APP_ID_FOR_UPDATE_APP_SETTINGS }}
KINTONE_TEST_APP_ID_FOR_PLUGIN: ${{ secrets.KINTONE_TEST_APP_ID_FOR_PLUGIN }}
KINTONE_BASIC_USER: ${{ secrets.KINTONE_BASIC_USER }}
KINTONE_BASIC_PASS: ${{ secrets.KINTONE_BASIC_PASS }}
steps:
- uses: actions/checkout@v4

- name: Set up JDK 8
uses: actions/setup-java@v4
with:
distribution: corretto
java-version: 8
cache: gradle

- name: Grant execute permission
run: |
chmod +x gradlew
chmod +x e2e-tests/gradlew
chmod +x e2e-tests/bin/*.sh

- name: Build and start proxy container
run: |
docker build -t java-sdk-test-proxy e2e-tests/docker/proxy
docker run -d --name squid-proxy -p 3128:3128 java-sdk-test-proxy
for i in $(seq 1 30); do
if nc -z localhost 3128; then
echo "Proxy is ready"
break
fi
echo "Waiting for proxy... ($i/30)"
sleep 1
done

- name: Run SmokeTest via proxy
run: |
cd e2e-tests
./bin/run-test.sh --tests SmokeTest
env:
KINTONE_PROXY_URL: http://localhost:3128

- name: Stop proxy container
run: docker rm -f squid-proxy || true
if: always()

e2e-auth-proxy-test:
name: Authenticated Proxy E2E Test
runs-on: ubuntu-latest
needs: e2e-proxy-test
env:
KINTONE_BASE_URL: ${{ secrets.KINTONE_BASE_URL }}
KINTONE_DEFAULT_USER: ${{ secrets.KINTONE_DEFAULT_USER }}
KINTONE_DEFAULT_PASSWORD: ${{ secrets.KINTONE_DEFAULT_PASSWORD }}
KINTONE_TEST_USER: ${{ secrets.KINTONE_TEST_USER }}
KINTONE_TEST_PASSWORD: ${{ secrets.KINTONE_TEST_PASSWORD }}
KINTONE_SPACE_ID: ${{ secrets.KINTONE_SPACE_ID }}
KINTONE_MULTI_THREAD_SPACE_ID: ${{ secrets.KINTONE_MULTI_THREAD_SPACE_ID }}
KINTONE_MULTI_THREAD_DEFAULT_THREAD_ID: ${{ secrets.KINTONE_MULTI_THREAD_DEFAULT_THREAD_ID }}
KINTONE_GUEST_SPACE_ID: ${{ secrets.KINTONE_GUEST_SPACE_ID }}
KINTONE_TEMPLATE_ID: ${{ secrets.KINTONE_TEMPLATE_ID }}
KINTONE_TEST_APP_ID: ${{ secrets.KINTONE_TEST_APP_ID }}
KINTONE_TEST_SPACE_APP_ID: ${{ secrets.KINTONE_TEST_SPACE_APP_ID }}
KINTONE_TEST_APP_ID_FOR_GET_PLUGINS_PREVIEW: ${{ secrets.KINTONE_TEST_APP_ID_FOR_GET_PLUGINS_PREVIEW }}
KINTONE_TEST_APP_ID_FOR_GET_FORM_LAYOUT_PREVIEW: ${{ secrets.KINTONE_TEST_APP_ID_FOR_GET_FORM_LAYOUT_PREVIEW }}
KINTONE_TEST_APP_ID_FOR_PROCESS_MANAGEMENT: ${{ secrets.KINTONE_TEST_APP_ID_FOR_PROCESS_MANAGEMENT }}
KINTONE_TEST_APP_ID_FOR_UPDATE_APP_SETTINGS: ${{ secrets.KINTONE_TEST_APP_ID_FOR_UPDATE_APP_SETTINGS }}
KINTONE_TEST_APP_ID_FOR_PLUGIN: ${{ secrets.KINTONE_TEST_APP_ID_FOR_PLUGIN }}
KINTONE_BASIC_USER: ${{ secrets.KINTONE_BASIC_USER }}
KINTONE_BASIC_PASS: ${{ secrets.KINTONE_BASIC_PASS }}
steps:
- uses: actions/checkout@v4

- name: Set up JDK 8
uses: actions/setup-java@v4
with:
distribution: corretto
java-version: 8
cache: gradle

- name: Grant execute permission
run: |
chmod +x gradlew
chmod +x e2e-tests/gradlew
chmod +x e2e-tests/bin/*.sh

- name: Build and start proxy container with auth
run: |
docker build -t java-sdk-test-proxy e2e-tests/docker/proxy
docker run -d --name squid-proxy-auth -p 3128:3128 \
-e proxy_auth=basic \
-e proxy_user=user1 \
-e proxy_pass=password1 \
java-sdk-test-proxy
for i in $(seq 1 30); do
if nc -z localhost 3128; then
echo "Proxy is ready"
break
fi
echo "Waiting for proxy... ($i/30)"
sleep 1
done

- name: Run SmokeTest via authenticated proxy
run: |
cd e2e-tests
./bin/run-test.sh --tests SmokeTest
env:
KINTONE_PROXY_URL: http://localhost:3128
KINTONE_PROXY_USER: user1
KINTONE_PROXY_PASS: password1

- name: Stop proxy container
run: docker rm -f squid-proxy-auth || true
if: always()
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,12 @@ build
.idea

.mise.toml.local

e2e-tests/.env
e2e-tests/build/
e2e-tests/bin/test/
e2e-tests/*.jar
e2e-tests/.classpath
e2e-tests/.project
e2e-tests/.settings/

59 changes: 59 additions & 0 deletions e2e-tests/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# kintone E2E Test Environment Variables
# Copy this file to .env and fill in the values

# Java Home (must match java command version, required for Gradle)
# Uncomment and adjust path if you have JAVA_HOME mismatch issues
# export JAVA_HOME=/path/to/java8

# kintone Base URL
export KINTONE_BASE_URL=https://example.cybozu.com

# Default User
export KINTONE_DEFAULT_USER=
export KINTONE_DEFAULT_PASSWORD=

# Test User
export KINTONE_TEST_USER=
export KINTONE_TEST_PASSWORD=

# Space IDs
export KINTONE_SPACE_ID=
export KINTONE_MULTI_THREAD_SPACE_ID=
export KINTONE_MULTI_THREAD_DEFAULT_THREAD_ID=
export KINTONE_GUEST_SPACE_ID=
export KINTONE_TEMPLATE_ID=

# Test App ID
# See README.md for required field configuration
export KINTONE_TEST_APP_ID=

# Test App in Space (pre-created app inside a space, for getApp/move tests)
export KINTONE_TEST_SPACE_APP_ID=

# Test App for Plugins Preview
export KINTONE_TEST_APP_ID_FOR_GET_PLUGINS_PREVIEW=

# Test App for Form Layout Preview
export KINTONE_TEST_APP_ID_FOR_GET_FORM_LAYOUT_PREVIEW=

# Test App for Process Management (requires NUMBER_FIELD "数値", process management disabled initially)
export KINTONE_TEST_APP_ID_FOR_PROCESS_MANAGEMENT=

# Test App for updateAppSettings tests (app name/icon will be changed, empty app is fine)
export KINTONE_TEST_APP_ID_FOR_UPDATE_APP_SETTINGS=

# Test App for Plugin tests (plugins will be added/removed, empty app is fine)
export KINTONE_TEST_APP_ID_FOR_PLUGIN=

# Optional: Basic Auth (if enabled)
# export KINTONE_BASIC_USER=
# export KINTONE_BASIC_PASS=

# Optional: Client Certificate (if required)
# export KINTONE_CLIENT_CERT=/path/to/cert.p12
# export KINTONE_CLIENT_CERT_PASS=

# Optional: Proxy (if required)
# export KINTONE_PROXY_URL=http://proxy.example.com:8080
# export KINTONE_PROXY_USER=
# export KINTONE_PROXY_PASS=
8 changes: 8 additions & 0 deletions e2e-tests/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.gradle
.idea
/build/
/bin/test/
/client/
.env
kintone-java-client.jar

Loading