Implement VM-test for gitea plugin
[?]
Mar 30, 2021, 8:35 PM
3VSNQ6TJKHAMCGNMCBSHKN4JGB7NTOWHP3LXPVI4DCFCFCGQ4MKQCDependencies
- [2]
A4NSGFS3LDAP: add VM test to flake.nix - [3]
JFG4FYTWImplement simple status notifications for Git repos hosted on gitea - [4]
ZLLMZMPOFix error codes for GiteaStatus plugin - [*]
RWNXH3H2lastModified -> lastModifiedDate
Change contents
- edit in flake.nix at line 496[6.9632][2.0]
tests.gitea.x86_64-linux =with import (nixpkgs + "/nixos/lib/testing-python.nix") { system = "x86_64-linux"; };makeTest {machine = { pkgs, ... }: {imports = [ hydraServer ];services.hydra-dev.extraConfig = ''<gitea_authorization>root=d7f16a3412e01a43a414535b16007c6931d3a9c7</gitea_authorization>'';nix = {distributedBuilds = true;buildMachines = [{hostName = "localhost";systems = [ "x86_64-linux" ];}];binaryCaches = [];};services.gitea = {enable = true;database.type = "postgres";disableRegistration = true;httpPort = 3001;};services.openssh.enable = true;environment.systemPackages = with pkgs; [ gitea git jq gawk ];networking.firewall.allowedTCPPorts = [ 3000 ];};skipLint = true;testScript = letscripts.mktoken = pkgs.writeText "token.sql" ''INSERT INTO access_token (id, uid, name, created_unix, updated_unix, token_hash, token_salt, token_last_eight) VALUES (1, 1, 'hydra', 1617107360, 1617107360, 'a930f319ca362d7b49a4040ac0af74521c3a3c3303a86f327b01994430672d33b6ec53e4ea774253208686c712495e12a486', 'XRjWE9YW0g', '31d3a9c7');'';scripts.git-setup = pkgs.writeShellScript "setup.sh" ''set -xmkdir -p /tmp/repo $HOME/.sshcat ${snakeoilKeypair.privkey} > $HOME/.ssh/privkchmod 0400 $HOME/.ssh/privkgit -C /tmp/repo initcp ${smallDrv} /tmp/repo/jobset.nixgit -C /tmp/repo add .git config --global user.email test@localhostgit config --global user.name testgit -C /tmp/repo commit -m 'Initial import'git -C /tmp/repo remote add origin gitea@machine:root/repoGIT_SSH_COMMAND='ssh -i $HOME/.ssh/privk -o StrictHostKeyChecking=no' \git -C /tmp/repo push origin mastergit -C /tmp/repo log >&2'';scripts.hydra-setup = pkgs.writeShellScript "hydra.sh" ''set -xsu -l hydra -c "hydra-create-user root --email-address \'alice@example.org' --password foobar --role admin"URL=http://localhost:3000USERNAME="root"PASSWORD="foobar"PROJECT_NAME="trivial"JOBSET_NAME="trivial"mycurl() {curl --referer $URL -H "Accept: application/json" \-H "Content-Type: application/json" $@}cat >data.json <<EOF{ "username": "$USERNAME", "password": "$PASSWORD" }EOFmycurl -X POST -d '@data.json' $URL/login -c hydra-cookie.txtcat >data.json <<EOF{"displayname":"Trivial","enabled":"1","visible":"1"}EOFmycurl --silent -X PUT $URL/project/$PROJECT_NAME \-d @data.json -b hydra-cookie.txtcat >data.json <<EOF{"description": "Trivial","checkinterval": "60","enabled": "1","visible": "1","keepnr": "1","enableemail": true,"emailoverride": "hydra@localhost","type": 0,"nixexprinput": "git","nixexprpath": "jobset.nix","inputs": {"git": {"value": "http://localhost:3001/root/repo.git", "type": "git"},"gitea_repo_name": {"value": "repo", "type": "string"},"gitea_repo_owner": {"value": "root", "type": "string"},"gitea_status_repo": {"value": "git", "type": "string"}}}EOFmycurl --silent -X PUT $URL/jobset/$PROJECT_NAME/$JOBSET_NAME \-d @data.json -b hydra-cookie.txt'';api_token = "d7f16a3412e01a43a414535b16007c6931d3a9c7";snakeoilKeypair = {privkey = pkgs.writeText "privkey.snakeoil" ''-----BEGIN EC PRIVATE KEY-----MHcCAQEEIHQf/khLvYrQ8IOika5yqtWvI0oquHlpRLTZiJy5dRJmoAoGCCqGSM49AwEHoUQDQgAEKF0DYGbBwbj06tA3fd/+yP44cvmwmHBWXZCKbS+RQlAKvLXMWkpNr1lwMyJZoSGgBHoUahoYjTh9/sJL7XLJtA==-----END EC PRIVATE KEY-----'';pubkey = pkgs.lib.concatStrings ["ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHA""yNTYAAABBBChdA2BmwcG49OrQN33f/sj+OHL5sJhwVl2Qim0vkUJQCry1zFpKTa""9ZcDMiWaEhoAR6FGoaGI04ff7CS+1yybQ= sakeoil"];};smallDrv = pkgs.writeText "jobset.nix" ''{ trivial = builtins.derivation {name = "trivial";system = "x86_64-linux";builder = "/bin/sh";allowSubstitutes = false;preferLocalBuild = true;args = ["-c" "echo success > $out; exit 0"];};}'';in ''import jsonmachine.start()machine.wait_for_unit("multi-user.target")machine.wait_for_open_port(3000)machine.wait_for_open_port(3001)machine.succeed("su -l gitea -c 'GITEA_WORK_DIR=/var/lib/gitea gitea admin create-user "+ "--username root --password root --email test@localhost'")machine.succeed("su -l postgres -c 'psql gitea < ${scripts.mktoken}'")machine.succeed("curl --fail -X POST http://localhost:3001/api/v1/user/repos "+ "-H 'Accept: application/json' -H 'Content-Type: application/json' "+ f"-H 'Authorization: token ${api_token}'"+ ' -d \'{"auto_init":false, "description":"string", "license":"mit", "name":"repo", "private":false}\''')machine.succeed("curl --fail -X POST http://localhost:3001/api/v1/user/keys "+ "-H 'Accept: application/json' -H 'Content-Type: application/json' "+ f"-H 'Authorization: token ${api_token}'"+ ' -d \'{"key":"${snakeoilKeypair.pubkey}","read_only":true,"title":"SSH"}\''')machine.succeed("${scripts.git-setup}")machine.succeed("${scripts.hydra-setup}")machine.wait_until_succeeds('curl -Lf -s http://localhost:3000/build/1 -H "Accept: application/json" '+ '| jq .buildstatus | xargs test 0 -eq')data = machine.succeed('curl -Lf -s "http://localhost:3001/api/v1/repos/root/repo/statuses/$(cd /tmp/repo && git show | head -n1 | awk "{print \\$2}")" '+ "-H 'Accept: application/json' -H 'Content-Type: application/json' "+ f"-H 'Authorization: token ${api_token}'")response = json.loads(data)assert len(response) == 2, "Expected exactly two status updates for latest commit!"assert response[0]['status'] == "success", "Expected latest status to be success!"assert response[1]['status'] == "pending", "Expected first status to be pending!"machine.shutdown()'';}; - replacement in src/lib/Hydra/Plugin/GiteaStatus.pm at line 65
my $url = "http://$domain:3000/api/v1/repos/$repoOwner/$repoName/statuses/$rev";my $url = "http://$domain:3001/api/v1/repos/$repoOwner/$repoName/statuses/$rev";