ci: add initial implementation of update runner action, ref: A24-10
Some checks failed
CI / tests_linux (9.0.X, ubuntu-latest) (push) Blocked by required conditions
CI / linter (9.0.X, ubuntu-latest) (push) Has been cancelled
SonarQube Scan / SonarQube Trigger (push) Has been cancelled

This commit is contained in:
Simon Diesenreiter 2024-12-03 13:25:53 +01:00
parent e03afad8e6
commit 8cb14caff1
3 changed files with 134 additions and 0 deletions

View File

@ -0,0 +1,32 @@
name: Update Level Inputs
permissions:
contents: write
env:
SKIP_MAKE_SETUP_CHECK: 'true'
on:
schedule:
- cron: '15 8 1-25 12 *'
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
run:
needs: release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up dotnet
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.X'
- name: Update inputs and publish
env:
SESSION_COOKIE: ${{ secrets.AOC_SESSION_COOKIE }}
run: |
dotnet run --project LevelInputUpdateRunner/LevelInputUpdateRunner.csproj
git add ./LevelInputProvider/input/*
git commit -m "feat(inputs): add current inputs, ref: NOISSUE"
make release

View File

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.9.1" />
<PackageReference Include="AoCAPI" Version="2.3.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,87 @@
using CommandLine;
using AoC.API;
using System.IO;
using System.Reflection;
const string levelFilePathTemplate = "{0}/inputs/{1}/{2}/input.txt";
// find git repo base path
DirectoryInfo? gitParentDirectory = new FileInfo(
Path.GetDirectoryName(Assembly.GetAssembly(typeof(Options)).Location)).Directory;
while(gitParentDirectory != null && !gitParentDirectory.ToString().EndsWith("LevelInputProvider"))
{
gitParentDirectory = gitParentDirectory?.Parent;
}
string gitBasePath = gitParentDirectory?.ToString() + Path.DirectorySeparatorChar + "LevelInputProvider";
Parser.Default.ParseArguments<Options>(args)
.WithParsed<Options>(o =>
{
if (string.IsNullOrEmpty(o.Cookie))
{
var env_cookie = System.Environment.GetEnvironmentVariable("SESSION_COOKIE");
if(string.IsNullOrEmpty(env_cookie))
{
throw new Exception("A session cookie must be provided!");
}
o.Cookie = env_cookie;
}
EntryPoint(o);
});
bool InputAlreadyExists(int year, int day)
{
return File.Exists(string.Format(levelFilePathTemplate, gitBasePath, year, day));
}
void EnsureDirectoryExists(string filePath)
{
FileInfo fi = new FileInfo(filePath);
if (!fi.Directory.Exists)
{
System.IO.Directory.CreateDirectory(fi.DirectoryName);
}
}
void EntryPoint(Options o)
{
var currentYear = DateTime.Now.Year;
var currentMonth = DateTime.Now.Month;
var currentDay = DateTime.Now.Day;
if(currentMonth != 12)
{
throw new Exception("Tsk Tsk, it isn't even December yet!");
}
for(int i = 1; i <= currentDay; i++)
{
Console.WriteLine("Attempt to get input " + i + " for year " + currentYear + "");
if(InputAlreadyExists(currentYear, i))
{
Console.WriteLine("Input " + i + " already exists!");
continue;
}
var client = new Session(o.Cookie, currentYear, i);
var inputTextTask = client.GetInputTextAsync();
string inputText = inputTextTask.Result;
var fileName = string.Format(levelFilePathTemplate, gitBasePath, currentYear, i);
EnsureDirectoryExists(fileName);
using(var sw = new StreamWriter(fileName))
{
sw.Write(inputText);
}
}
Console.WriteLine("Finished input fetching!");
}
public class Options
{
[Option('c', "cookie", Required = false, HelpText = "The AoC session cookie to use.")]
public string Cookie { get; set; } = "";
}