Compare commits
No commits in common. "f36d8077314a7831b5acb0877f22138e73749852" and "4075eb78c8e2d20b6a24029249284cf02d1368b3" have entirely different histories.
f36d807731
...
4075eb78c8
@ -1,24 +0,0 @@
|
|||||||
name: Daily cloudflare API integration test
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '0 */6 * * *' # Every hour
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
cloudflare-api-test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check out repository code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: JDK setup
|
|
||||||
uses: actions/setup-java@v4
|
|
||||||
with:
|
|
||||||
distribution: 'zulu'
|
|
||||||
java-version: '17'
|
|
||||||
- name: Run integration tests with Cloudflare API
|
|
||||||
env:
|
|
||||||
SPRING_PROFILES_ACTIVE: integration
|
|
||||||
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
|
||||||
CLOUDFLARE_API_KEY: ${{ secrets.CLOUDFLARE_API_KEY }}
|
|
||||||
CLOUDFLARE_EMAIL: hitanshu98@gmail.com
|
|
||||||
run: ./gradlew integrationTestOnly
|
|
||||||
@ -13,19 +13,17 @@ jobs:
|
|||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Get new version
|
- name: Get new version
|
||||||
id: new_version
|
id: new_version
|
||||||
run: |
|
run: |
|
||||||
VERSION=$(git describe --tags --abbrev=0)
|
VERSION=$(git describe --tags --abbrev=0)
|
||||||
echo "Current version: ${VERSION}"
|
echo ${VERSION}
|
||||||
MAJOR=$(echo ${VERSION} | cut -d "." -f 1)
|
MAJOR=$(echo ${VERSION} | cut -d "." -f 1)
|
||||||
MINOR=$(echo ${VERSION} | cut -d "." -f 2)
|
MINOR=$(echo ${VERSION} | cut -d "." -f 2)
|
||||||
PATCH=$(echo ${VERSION} | cut -d "." -f 3)
|
PATCH=$(echo ${VERSION} | cut -d "." -f 3)
|
||||||
NEW_PATCH=$((PATCH + 1))
|
NEW_PATCH=$(( ${PATCH} + 1))
|
||||||
NEW_VERSION="${MAJOR}.${MINOR}.${NEW_PATCH}"
|
echo ${NEW_PATCH}
|
||||||
echo "New version: ${NEW_VERSION}"
|
echo "new_version=$(echo "${MAJOR}.${MINOR}.${NEW_PATCH}")" >> $GITHUB_OUTPUT
|
||||||
echo "new_version=${NEW_VERSION}" >> $GITHUB_OUTPUT
|
|
||||||
build_tag_push:
|
build_tag_push:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: tag
|
needs: tag
|
||||||
@ -45,11 +43,11 @@ jobs:
|
|||||||
uses: gradle/actions/wrapper-validation@v3
|
uses: gradle/actions/wrapper-validation@v3
|
||||||
- name: Create and push tag
|
- name: Create and push tag
|
||||||
run: |
|
run: |
|
||||||
echo "New version: ${{ needs.tag.outputs.new_version }}"
|
echo "NEW_VERSION=${{ needs.tag.outputs.new_version }}"
|
||||||
git config --global user.name "${{gitea.actor}}"
|
git config --global user.name "${{gitea.actor}}"
|
||||||
git config --global user.email "${{ gitea.actor }}@users.noreply.github.com"
|
git config --global user.email "${{ gitea.actor }}@users.noreply.github.com"
|
||||||
git tag -a "${{ needs.tag.outputs.new_version }}" -m "Pushing new version ${{ needs.tag.outputs.new_version }}"
|
git tag -a ${{ needs.tag.outputs.new_version }} -m "Pushing new version ${{ needs.tag.outputs.new_version }}"
|
||||||
git push origin "${{ needs.tag.outputs.new_version }}"
|
git push origin ${{ needs.tag.outputs.new_version }}
|
||||||
- name: Log in to Gitea Docker Registry
|
- name: Log in to Gitea Docker Registry
|
||||||
uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
@ -64,23 +62,3 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
docker push 192.168.0.100:8928/hithomelabs/cftunnels:test
|
docker push 192.168.0.100:8928/hithomelabs/cftunnels:test
|
||||||
docker push 192.168.0.100:8928/hithomelabs/cftunnels:${{ needs.tag.outputs.new_version }}
|
docker push 192.168.0.100:8928/hithomelabs/cftunnels:${{ needs.tag.outputs.new_version }}
|
||||||
sync_forks:
|
|
||||||
name: Sync All Forks
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: build_tag_push
|
|
||||||
steps:
|
|
||||||
- name: Check out repository code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Sync all forks via Gitea API
|
|
||||||
run: |
|
|
||||||
echo "Fetching forks for Hithomelabs/CFTunnels..."
|
|
||||||
response=$(curl -s -X GET "https://gitea.hithomelabs.com/api/v1/repos/Hithomelabs/CFTunnels/forks" -H "Authorization: token ${{secrets.TOKEN}}")
|
|
||||||
filtered=$(echo "$response" | grep -o '"clone_url":"[^"]*"' | sed 's/"clone_url":"\([^"]*\)"/\1/' | grep -v "/Hithomelabs")
|
|
||||||
echo "Detected forks:"
|
|
||||||
echo "$filtered"
|
|
||||||
readarray -t forks <<< "$filtered"
|
|
||||||
for fork_url in "${forks[@]}"; do
|
|
||||||
echo "🔄 Syncing fork: $fork_url"
|
|
||||||
authed_url=$(echo "$fork_url" | sed "s#https://#https://${{secrets.TOKEN}}@#")
|
|
||||||
git push "$authed_url" test &
|
|
||||||
done
|
|
||||||
|
|||||||
21
build.gradle
21
build.gradle
@ -15,27 +15,6 @@ java {
|
|||||||
|
|
||||||
test {
|
test {
|
||||||
systemProperty 'spring.profiles.active', 'test'
|
systemProperty 'spring.profiles.active', 'test'
|
||||||
useJUnitPlatform {
|
|
||||||
excludeTags 'integration'
|
|
||||||
}
|
|
||||||
testLogging {
|
|
||||||
events "passed", "skipped", "failed", "standardOut", "standardError"
|
|
||||||
exceptionFormat "full" // shows full stack trace
|
|
||||||
showStandardStreams = true // shows println/log output
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register('integrationTestOnly', Test) {
|
|
||||||
useJUnitPlatform {
|
|
||||||
includeTags 'integration'
|
|
||||||
}
|
|
||||||
description = 'Runs only integration tests tagged with @Tag("integration")'
|
|
||||||
group = 'verification'
|
|
||||||
testLogging {
|
|
||||||
events "passed", "skipped", "failed"
|
|
||||||
exceptionFormat "full"
|
|
||||||
showStandardStreams = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
|||||||
1
settings.gradle
Normal file
1
settings.gradle
Normal file
@ -0,0 +1 @@
|
|||||||
|
rootProject.name = 'CFTunnels'
|
||||||
@ -5,12 +5,10 @@ import io.swagger.v3.oas.models.servers.Server;
|
|||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Profile;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@Profile("!integration")
|
|
||||||
public class OpenApiConfig {
|
public class OpenApiConfig {
|
||||||
|
|
||||||
@Value("${api.baseUrl}")
|
@Value("${api.baseUrl}")
|
||||||
|
|||||||
@ -1,3 +0,0 @@
|
|||||||
cloudflare.accountId=${CLOUDFLARE_ACCOUNT_ID}
|
|
||||||
cloudflare.apiKey=${CLOUDFLARE_API_KEY}
|
|
||||||
cloudflare.email=${CLOUDFLARE_EMAIL}
|
|
||||||
@ -4,6 +4,12 @@ cloudflare.apiKey=${CLOUDFLARE_API_KEY}
|
|||||||
cloudflare.email=${CLOUDFLARE_EMAIL}
|
cloudflare.email=${CLOUDFLARE_EMAIL}
|
||||||
spring.profiles.active=${ENV}
|
spring.profiles.active=${ENV}
|
||||||
|
|
||||||
|
# set root level
|
||||||
|
logging.level.root=INFO
|
||||||
|
# package-specific
|
||||||
|
logging.level.org.springframework=TRACE
|
||||||
|
logging.level.com.myapp=INFO
|
||||||
|
|
||||||
/ * * Masking sure app works behind a reverse proxy
|
/ * * Masking sure app works behind a reverse proxy
|
||||||
server.forward-headers-strategy=framework
|
server.forward-headers-strategy=framework
|
||||||
|
|
||||||
|
|||||||
@ -1,55 +0,0 @@
|
|||||||
package com.hithomelabs.CFTunnels.Integration;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import com.hithomelabs.CFTunnels.Config.CloudflareConfig;
|
|
||||||
import com.hithomelabs.CFTunnels.Headers.AuthKeyEmailHeader;
|
|
||||||
import org.junit.jupiter.api.DisplayName;
|
|
||||||
import org.junit.jupiter.api.Tag;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
import org.springframework.boot.test.web.client.TestRestTemplate;
|
|
||||||
import org.springframework.http.HttpEntity;
|
|
||||||
import org.springframework.http.HttpMethod;
|
|
||||||
import org.springframework.http.HttpStatus;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
|
||||||
@ActiveProfiles("integration")
|
|
||||||
@Tag("integration")
|
|
||||||
public class CoudflareApiIntegrationTest {
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
TestRestTemplate restTemplate;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
AuthKeyEmailHeader authKeyEmailHeader;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
CloudflareConfig cloudflareConfig;
|
|
||||||
|
|
||||||
private static ObjectMapper mapper = new ObjectMapper();
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@DisplayName("Calls cloudflare cfd tunnels API and checks that dev tunnel should be a part of the response")
|
|
||||||
public void getTunnelsTest(){
|
|
||||||
|
|
||||||
// * * Resource URL to hit get request at
|
|
||||||
String url = "https://api.cloudflare.com/client/v4/accounts/" + cloudflareConfig.getAccountId() + "/cfd_tunnel";
|
|
||||||
HttpEntity<String> httpEntity = new HttpEntity<>("", authKeyEmailHeader.getHttpHeaders());
|
|
||||||
ResponseEntity<Map> response = restTemplate.exchange(url, HttpMethod.GET, httpEntity, Map.class);
|
|
||||||
assertEquals(HttpStatus.OK, response.getStatusCode());
|
|
||||||
List<Map<String, Object>> tunnelList = (List<Map<String, Object>>) response.getBody().get("result");
|
|
||||||
boolean hasName = tunnelList.stream()
|
|
||||||
.anyMatch(tunnel -> "devtunnel".equals(tunnel.get("name")));
|
|
||||||
assertTrue(hasName);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user